gpt4 book ai didi

c - sizeof struct 小于 4 B 被报告为实际

转载 作者:行者123 更新时间:2023-11-30 15:29:54 25 4
gpt4 key购买 nike

我试图理解结构填充。以下结构已填充:

struct s {
int j;
char c;
int i;
};

==> sizeof(struct s) = 12

但对于这个结构来说,它不是填充。为什么?

struct s {
char c;
}

==> sizeof(struct s) = 1或

struct s {
short int i;
}

==> sizeof(struct s) = 2

为什么填充不适用于上述两个结构?

最佳答案

填充是为了保持struct的成员对齐,以便访问速度更快。(*)考虑一下结构数组中会发生什么:

struct s {
int i;
char c;
};

struct s a[0];

如果未填充此结构,a[1] 将具有地址 (char *)a + 5。这是未对齐的,假设 a[0] 已对齐。因此,该结构通常会填充为 sizeof(int) 的倍数。 (如果ilong long,那么整个结构将被填充为sizeof(long long)的倍数;尝试看看。)

对于单个 char,无需填充,因为 char 无论如何都会对齐,而没有其他成员变得不对齐。对于单个 short,对齐 2 足以保持单个成员始终对齐。

(*) 在某些 CPU(但不是 Intel x86 兼容的 CPU)上,未对齐的访问实际上可能会导致程序崩溃。

关于c - sizeof struct 小于 4 B 被报告为实际,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970244/

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