gpt4 book ai didi

c - C 结构体的大小; GCC 与实际计算

转载 作者:行者123 更新时间:2023-11-30 20:00:41 25 4
gpt4 key购买 nike

根据c_faq ,

typedef struct  {
char a[3];
short int b;
long int c;
char d[3];
} T;

sizeof(T) 在 32 位 gcc 编译器上将返回 16。因为对齐是4,所以要计算,我应该这样做:3+(1)+2+(2)+4+3+(1),其中括号表示填充。 GCC 表示同意。

基于这个逻辑,我自己针对另一个问题做了一些练习。

typedef struct{
char buf1[9];
unsigned short s;
double d;
char buf2[3];
} S;

sizeof(S) 在 32 位 gcc 编译器上应该返回 32。因为对齐是8,所以要计算,我应该这样做:8+1+2+(5)+8+3+(5)。然而,gcc 告诉我 sizeof(S) 是 24。

我认为这是因为优化,但是,在弄乱了 gcc 中的 -O0 标志后,sizeof(S) 的结果仍然是 24。

我使用gcc -m32 main.c进行编译。

这是怎么回事?

如果我理解正确的话,我的计算和GCC的计算不匹配的原因是因为每个编译器都有自己的处理结构数据的方式。那么计算结构体大小的通用方法是什么?或者更确切地说,计算结构体大小的原始方法是什么?

最佳答案

Then what is a universal way of calculating the size of a struct? Or rather, what is the original way of calculating the size of a struct?

没有通用的方法。也不存在真正的“原始”方式,因为 C 是在 1970 年代创建的,当时 PDP-11 还很流行,而 C 直到 1989 年才正式指定。它是实现定义的,并且因平台而异(我这不仅仅是轻率;它确实在平台和实现之间存在差异(甚至编译器标志!))。

如果您的教授希望您计算结构的大小,那么他或她必须提供每种数据类型所需的对齐方式。如果他们不这样做,那么他们的问题就不够具体(并且几乎无限数量的不同答案可以被辩护为“正确”)。

关于c - C 结构体的大小; GCC 与实际计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41093973/

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