4
double a;
unsigned int b;

在运行时,操作系统如何知道这些变量有多少字节,以及它们的位应该如何解释?如果这是依赖于语言/操作系统的,则在 Windows 上假设为 C。

是否有将变量标识符的位表示映射到字节大小和数据类型的 LUT?从 uC 上的汇编编程中,我记得编译器神奇地知道分配给变量的字节数,并适当地执行零填充/等。

4

2 回答 2

5

就操作系统而言,这些只是内存块。除了“随机位串”之外,它对它们包含的内容一无所知。

智能都在编译器中——编译器跟踪变量的类型,然后为适当的字节数生成加载和存储指令,并生成对适当大小和编码方案的操作数进行操作的代码(例如,它知道使用无符号加法运算,而不是无符号整数上的有符号运算)。

于 2013-07-03T01:37:32.103 回答
1

它取决于语言和编译器。如今,unsigned int 是 32 位的,但这并不总是取决于语言、编译器和目标的规则。如果您要在较旧的 8086 或 16 位处理器(微控制器)上使用 int,则 int 可能是 16 位。双人房更标准一点。假设一个 IEEE 754 浮点数单是 32 位和双 64 位。但它又取决于语言、编译器和目标。

然后,如果像这样背靠背定义这些之间的任何填充也是语言、编译器和目标相关的。假设它们分别是 64 位和 32 位,编译器可能不会费心填充任何东西,因为在 32 位边界上很好地排列(基于您提供的两行的大假设)。但它可能会选择放置 32 位填充,以便两者都是 64 位对齐的。

于 2013-07-03T01:37:42.593 回答