编译器如何以及在内存中的何处存储有关变量类型的信息

How and where in memory does the compiler store the information about what type a variable is?

本文关键字:存储 何处 变量 信息 类型 内存 编译器      更新时间:2023-10-16

显然,编译器必须存储变量x是无符号int还是有符号int、float或其他信息,但在哪里以及如何存储?

有什么查找表吗?我在内存中的哪里找到它,在可执行文件的哪个部分?

它是隐式的,在编译器选择的指令中。

例如,如果地址18包含float,则编译器可以使用指令从地址18加载浮点寄存器。如果它在地址20的邻居包含int,编译器可以从以前的地址+2加载一个整数寄存器。

如前所述,编译器有一个符号表,因此它知道所有变量的位置。这使它能够选择正确的指令。但是,您不能简单地从单个指令中派生出符号表的内容。

C和C++实现通常不会在任何地方存储变量名,除非您启用调试信息。正常执行不需要变量名,但从共享对象或DLL导出的符号除外。