关于c中的数据对齐[重复]

Posted

技术标签:

【中文标题】关于c中的数据对齐[重复]【英文标题】:About the data alignment in c [duplicate] 【发布时间】:2021-10-16 14:36:43 【问题描述】:

我定义了一个结构:

#include <stdint.h>
#include <stdio.h>
#define O(type, field) (size_t)(&(((type *)0)->field))
struct byname 
int16_t int16;
int32_t int32;
int64_t int64;;

然后我使用sizeof(struct byname),它返回16,我可以理解。

但是,当我定义类似添加 int8_t 时:

#include <stdint.h>
#include <stdio.h>
#define O(type, field) (size_t)(&(((type *)0)->field))
struct byname 
int16_t int16;
int32_t int32;
int64_t int64;
int8_t int8;;

它只是返回 24,我认为 int8 只需要 1 by 并且根据数据对齐有 3 bys 填充,所以我认为答案应该是 20。

谁能给我解释一下 24 是怎么来的?

【问题讨论】:

这是因为填充 这将帮助你理解en.wikipedia.org/wiki/Data_structure_alignment “重复问题”与OP的问题不一样... 【参考方案1】:

结构包含int64_t。如果编译器认为int64_t 应该对齐到 8 字节边界,那么将结构体的大小设置为 8 的倍数(因此是 24 字节而不是 20)来对齐 @987654324 数组中的每个 int64_t int64; 是合理的@ 到 8 字节边界。

【讨论】:

以上是关于关于c中的数据对齐[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在C中对齐动态内存中数组的开头[重复]

关于C中的指针和字符串的问题[重复]

按位或运算符 | C中用于对齐内存块的用法[重复]

在导航中实现垂直对齐徽标[重复]

div中的垂直对齐图像[重复]

垂直对齐浮动div中的元素[重复]