数据类型和大小如何存储在内存中?

时间:2013-07-03 01:32:03

标签: memory-management assembly types

double a;
unsigned int b;

在运行时,操作系统将如何知道这些变量附加了多少字节,以及如何解释它们的位?如果这是依赖于语言/ OS的,请假设Windows上有C.

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

它依赖于语言和编译器。这些天unsigned int是32位,但这并不总是依赖于语言,编译器和目标的规则。如果要在较旧的8086或16位处理器(微控制器)上使用int,则int可能为16位。双倍是更标准的。假设一个IEEE 754浮点数,一个是32位和两个64位。但同样,它依赖于语言,编译器和目标。

然后,这些之间的任何填充如果背靠背定义,这样也是语言,编译器和目标依赖。假设这些分别是64位和32位,编译器可能无需填充任何内容,因为在32位边界上很好地排队(基于您提供的两条线的大假设)。但它可能会选择放置32位填充,以便两者都是64位对齐。