gpt4 book ai didi

c++ - 当编译器决定填充结构时

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:56 25 4
gpt4 key购买 nike

假设我们有:

struct A{
char a1;
char a2;
};

struct B{
int b1;
char b2;
};

struct C{
char C1;
int C2;
};

我知道因为填充到字大小的倍数(假设字大小=4),sizeof(C)==8 虽然sizeof(char)==1sizeof(int)==4

我希望 sizeof(B)==5 而不是 sizeof(B)==8

但是如果 sizeof(B)==8 我希望 sizeof(A)==4 而不是 sizeof(A)==2.

谁能解释一下为什么填充和对齐在这些情况下的工作方式不同?

最佳答案

一种常见的填充方案是填充结构,以便每个成员以该成员大小的偶数倍或机器字大小(以较小者为准)开始。整个结构按照相同的规则填充。

假设我期望这样的填充方案:

struct A 中最大的成员大小为 1,因此不使用填充。

struct B 中,5 的大小被填充为 8,因为一个成员的大小为 4。布局将是:

int     4
char 1
padding 3

struct C 中,在 int 之前插入了一些填充,因此它从可被 4 整除的地址开始。

布局将是:

char    1
padding 3
int 4

关于c++ - 当编译器决定填充结构时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23271619/

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