gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:17 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com