c - 为什么在 32 位系统中包含一个 int64 变量时结构大小是 8 的倍数

标签 c struct sizeof

在 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/

相关文章:

c - CMD 上的输入重定向

c - 异步线程的问题(使用 pthread)。抱歉,但更具体的是 body

c - 如何仅使用指针运算访问结构中的数组

c - 定义一个delete(student st[], int *itemcount)函数来从学生对象数组中删除目标记录

c - sizeof Pointer 因同一架构上的数据类型而异

c - C 中的 Pthread 屏障

谁能解释一下下面的c代码吗?

c++ - 保证 char、wchar_t、char16_t、char32_t 的大小排序

c - 为什么 sizeof(x++) 不增加 x?

c - Linux 中从父进程到子进程的信号