gpt4 book ai didi

c - 为什么结构填充没有正常发生?

转载 作者:太空狗 更新时间:2023-10-29 17:18:21 27 4
gpt4 key购买 nike

#include<stdio.h>

struct A
{
char c;
double e;
int s;
}A;

int main()
{
printf("%u\n", sizeof(A));
return 0;
}

它给出输出 16。如果把结构内部填充和结构填充作为一个整体来考虑,不应该是24吗?

我正在使用 GCC 4.8.2Ubuntu 14.04 32 位 上编译代码。

最佳答案

您的计算假定 double 需要 8 字节对齐。并非所有架构都是如此。

在带有 GCC 的 32 位 x86 Linux 上,double 默认为 4 字节对齐。您可以使用 -malign-double 标志更改它以使其 8 字节对齐。

因此布局假设默认为 32 位 x86 Linux:

char       // 1 byte
// 3 byte padding
double // 8 bytes
int // 4 bytes

所以一共16个字节,中间有3个字节的padding。

维基百科文章 Data structure alignment在一些编译器/环境中具有 32 位 x86 和 64 位 x86_64 上各种类型的大小/对齐编号。

关于c - 为什么结构填充没有正常发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29861499/

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