由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 再问C++问题。
相关主题
A C++ compiler related interview question关于C++中const的问题
this和&*this的区别[合集] 简单问题一个:为什么可以间接访问私有指针成员
vptr 到底是在第一个还是最后一个C++一问
C++小插曲老年工程师转行学C++的更新的问题
问个虚函数的作用C一个问题搞不懂
问一个关于C++指针的问题我有个很傻的问题,关于function call via pointer
C++指针问题 int (*) [10]int &x=y;的问题
python不支持多态请问c++里empty class的问题
相关话题的讨论汇总
话题: 类型信息话题: c++话题: 类型话题: type话题: 虚表
进入Programming版参与讨论
1 (共1页)
z****e
发帖数: 2024
1
请问类型信息是放在那里的?
class Type{};
这玩意的类型信息是不是放在静态区域?每个对象都有一个指针能得到啊?
我知道对于有虚表的class,虚表里有类型信息,对不?
这样对象的vptr就能得到类型了。指针和type_info都能用了。
那么没有虚表的对象呢?built-in的类型呢?
比如
Type* p;
p 的大小,只有一个机器word的大小啊,没有额外的空间存储类型了,
dereference的时候,编译器如果得到p的类型呢?这样才能知道把地址展开到哪里啊。
或者我这个问题本身就有问题?
早谢。
d****p
发帖数: 685
2
没有虚表,类型编译时就可知,要RTTI干嘛?

【在 z****e 的大作中提到】
: 请问类型信息是放在那里的?
: class Type{};
: 这玩意的类型信息是不是放在静态区域?每个对象都有一个指针能得到啊?
: 我知道对于有虚表的class,虚表里有类型信息,对不?
: 这样对象的vptr就能得到类型了。指针和type_info都能用了。
: 那么没有虚表的对象呢?built-in的类型呢?
: 比如
: Type* p;
: p 的大小,只有一个机器word的大小啊,没有额外的空间存储类型了,
: dereference的时候,编译器如果得到p的类型呢?这样才能知道把地址展开到哪里啊。

z****e
发帖数: 2024
3
没看懂,你这句话和GRE阅读一样,可以多种理解。
那些没有vitural的class,怎么知道类型呢?

【在 d****p 的大作中提到】
: 没有虚表,类型编译时就可知,要RTTI干嘛?
p***o
发帖数: 1252
4
你要搞清楚什么是run-time什么是compile-time。

【在 z****e 的大作中提到】
: 没看懂,你这句话和GRE阅读一样,可以多种理解。
: 那些没有vitural的class,怎么知道类型呢?

z****e
发帖数: 2024
5
辛辛苦苦几十年,一夜我回到解放前。

【在 p***o 的大作中提到】
: 你要搞清楚什么是run-time什么是compile-time。
d****p
发帖数: 685
6
If you want to be not bad c++ coder, understanding compiler's behaviour is
as important as coding itself.

【在 z****e 的大作中提到】
: 辛辛苦苦几十年,一夜我回到解放前。
c********e
发帖数: 383
7
确实实问题本身有问题。
这么说吧,你觉得一个int deallocate的时候需要type info look up吗?
这就是compile time的意思。
r********3
发帖数: 2998
8
这些类型信息是放在编译器的SymbolTable里面的,在编译器的数据空间里面,编译器
执行完编译,这部分信息当然就释放了。你的程序当然访问不了。

【在 z****e 的大作中提到】
: 请问类型信息是放在那里的?
: class Type{};
: 这玩意的类型信息是不是放在静态区域?每个对象都有一个指针能得到啊?
: 我知道对于有虚表的class,虚表里有类型信息,对不?
: 这样对象的vptr就能得到类型了。指针和type_info都能用了。
: 那么没有虚表的对象呢?built-in的类型呢?
: 比如
: Type* p;
: p 的大小,只有一个机器word的大小啊,没有额外的空间存储类型了,
: dereference的时候,编译器如果得到p的类型呢?这样才能知道把地址展开到哪里啊。

z****e
发帖数: 2024
9
《编译原理》 大学时候就糊里糊涂过的,教材写的无法理解。后来也就不接触了。而
且感觉学《编译原理》那门课好像和C++这个编译器的理解还是两回事啊。比如early
binding 和late binding。
哪里有讲解呢?

【在 d****p 的大作中提到】
: If you want to be not bad c++ coder, understanding compiler's behaviour is
: as important as coding itself.

z****e
发帖数: 2024
10
其实我主要是想知道 early binding是如何实现的。
因为late binding有虚表,基于类型的函数调用,和基于类型的操作,都能从虚表的首
地址内容得到。但是early binding 呢?
不能每次都回头找个表,看看这个变量是那个类型,再操作吧?
而且类型信息是存在硬盘上,还是内存里边?
我这个的确比较糊涂。

【在 r********3 的大作中提到】
: 这些类型信息是放在编译器的SymbolTable里面的,在编译器的数据空间里面,编译器
: 执行完编译,这部分信息当然就释放了。你的程序当然访问不了。

z****e
发帖数: 2024
11
compile-time时候知道的类型信息,是不是都写到了obj目标文件里边了?就是比如指
针应该偏移多少,目标文件的指令集里边都写好了?因为类型知道,对吧?类型信息就
是已经转化为了目标文件的指令了对吧?

【在 p***o 的大作中提到】
: 你要搞清楚什么是run-time什么是compile-time。
s******e
发帖数: 431
12
可以这样理解。

【在 z****e 的大作中提到】
: compile-time时候知道的类型信息,是不是都写到了obj目标文件里边了?就是比如指
: 针应该偏移多少,目标文件的指令集里边都写好了?因为类型知道,对吧?类型信息就
: 是已经转化为了目标文件的指令了对吧?

P********e
发帖数: 2610
13
c++编译器估计是世界最牛的编译器了
pointer就是一个word,dereference的时候找addressed的type,就知道span多少memory

【在 z****e 的大作中提到】
: 请问类型信息是放在那里的?
: class Type{};
: 这玩意的类型信息是不是放在静态区域?每个对象都有一个指针能得到啊?
: 我知道对于有虚表的class,虚表里有类型信息,对不?
: 这样对象的vptr就能得到类型了。指针和type_info都能用了。
: 那么没有虚表的对象呢?built-in的类型呢?
: 比如
: Type* p;
: p 的大小,只有一个机器word的大小啊,没有额外的空间存储类型了,
: dereference的时候,编译器如果得到p的类型呢?这样才能知道把地址展开到哪里啊。

f*****Q
发帖数: 1912
14
这个是编译是决定的。
1 (共1页)
进入Programming版参与讨论
相关主题
请问c++里empty class的问题问个虚函数的作用
"(char *)-1" 是什么意思?问一个关于C++指针的问题
一个c++问题 (转载)C++指针问题 int (*) [10]
copy constructor问题。python不支持多态
A C++ compiler related interview question关于C++中const的问题
this和&*this的区别[合集] 简单问题一个:为什么可以间接访问私有指针成员
vptr 到底是在第一个还是最后一个C++一问
C++小插曲老年工程师转行学C++的更新的问题
相关话题的讨论汇总
话题: 类型信息话题: c++话题: 类型话题: type话题: 虚表