在 C 编程语言中,我使用 32 位系统, 我有一个结构,这个结构的大小是四的倍数。 但我查看链接器映射文件,大小是八的倍数 示例
typedef struct _str
{
U64 var1,
U32 var2
} STR;
这个结构的大小是 16。 但是
typedef struct _str
{
U32 var1,
U32 var2,
U32 var3
} STR2;
STR2 的大小为 12。 我正在研究 32 位 ARM 微 Controller 。 不知道为什么
最佳答案
第一个结构被填充以使其在 U64 边界上对齐:它等同于
struct STR
{
U64 var1;
U32 var2;
U8 pad[4]; /* sizeof(U64) - sizeof(U32) */
};
因此,当在 struct STR [] 的数组中使用时,每个 U64 都很好地符合 ABI 要求。
看看Procedure Call Standard for ARM Architecture , 4.1 基本数据类型 .
关于c - 为什么在 32 位系统中包含一个 int64 变量时结构大小是 8 的倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5042990/