关于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中的数据对齐[重复]的主要内容,如果未能解决你的问题,请参考以下文章