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 | |