【发布时间】:2012-08-22 16:29:35
【问题描述】:
考虑以下程序
#include <cstdio>
#include <stdint.h>
struct Foo
{
int32_t a;
int32_t b;
int32_t c;
};
struct Bar
{
int32_t a;
int32_t b;
int16_t c;
};
int main()
{
printf("sizeof(Foo)=%u\nsizeof(Bar)=%u",sizeof(Foo),sizeof(Bar));
return 0;
}
使用 MinGW 编译时,我在 32 位和 64 位系统上都得到 sizeof(Foo)=12 和 sizeof(Bar)=12(我猜在 16 位环境中,sizeof(Bar)=10) .未来这些结构的大小是否有可能达到 16 以更好地适应 64 位环境?
我将结构存储在文件中,并且不想在将来添加解决方法。 Doom 事物结构布局在 1993 年可能是一个不错的选择,但现在不是。
【问题讨论】:
-
<cstdio>是 C++ 标头;你的意思是<stdio.h>?size_t参数的正确格式是%zu,而不是%u;如果您的实现不支持它,您可以转换为unsigned long并使用%lu。 -
@KeithThompson 很高兴知道。但是列出的大小无论如何都是正确的,这可能是由于 x86-64 架构的字节顺序(size_t 是 ll 或 I64 或您所说的)
标签: c compiler-construction padding microprocessors word-size