在我的Linux VM中,即使是int32_t
,如果我为它分配不同的值,它会给出不同的大小。例如:
#include <stdint.h>
int32_t i = 0x123456;
int main(int argc, char *argv[])
{
return 0;
}
objdump
报告i
只占用3个字节:
Disassembly of section .data:
0804a010 <__data_start>:
804a010: 00 00 add %al,(%eax)
...
0804a014 <__dso_handle>:
804a014: 00 00 add %al,(%eax)
...
0804a018 <i>:
804a018: 56 push %esi
804a019: 34 12 xor $0x12,%al
...
查看stdint.h
,我发现int32_t
只是int
的typedef:
typedef int int32_t;
我虽然C99标准强制要求int32_t
保证恰好是4个字节?
答案 0 :(得分:2)
C(就像C ++一样)有一种称为&#34; as-if&#34;规则。从语言的角度来看,事情必须出现,好像它们遵守C规则,即使实际的二进制文件没有。
特别是sizeof(int32_t)
对于像malloc(100*sizeof(int32_t))
这样的事情最为重要,你绝对需要400字节。 (或者200字节,当字节是16位时)。
但是,在这种简单的情况下,您无法检测到&#34;缺失&#34;任何标准方法都是字节,所以这是合法的。