为什么int32_t在stdint.h中别名为int?

时间:2016-10-06 07:36:48

标签: c

在我的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个字节?

1 个答案:

答案 0 :(得分:2)

C(就像C ++一样)有一种称为&#34; as-if&#34;规则。从语言的角度来看,事情必须出现,好像它们遵守C规则,即使实际的二进制文件没有。

特别是sizeof(int32_t)对于像malloc(100*sizeof(int32_t))这样的事情最为重要,你绝对需要400字节。 (或者200字节,当字节是16位时)。

但是,在这种简单的情况下,您无法检测到&#34;缺失&#34;任何标准方法都是字节,所以这是合法的。