【发布时间】:2021-08-22 17:31:58
【问题描述】:
我试图用这段代码理解一些关于结构填充的事情:
#include <stdio.h>
#include <stdint.h>
struct azaza { // of course suboptimal arrangement of elements
uint32_t addr1;
uint32_t addr2;
uint8_t tmp;
uint32_t addr3;
uint8_t flags;
};
int main(void) {
printf("%d\n", sizeof(struct azaza));
return 0;
}
输出为:20,
但我期待24,因为我的机器和我的操作系统是 64 位的,我认为对齐应该在 4 字节边界上。
为什么 x86-64 OS 上的结构对齐是在 4 字节边界上?
【问题讨论】:
-
机器/操作系统位不重要,编译器才是重要的——你使用什么选项?
-
@IłyaBursov 没有特殊选项,只有
gcc pad.c -
因为您没有任何需要 64 位对齐的成员。
-
如果结构中只有一个
uint8_t成员,你会更加惊讶... -
@TimRandall 我提出了涵盖所有内容的副本。
标签: c data-structures struct sizeof memory-alignment