繁体   English   中英

64 位上的 uint32_t 对齐?

[英]uint32_t alignment on 64-bit?

我很好奇 uint32_t 类型在 64 位平台上的对齐方式。 规范说 uint32_t 应该正好是给定的位宽,实际上它似乎是:

> printf("sizeof(uint32_t): %zd\n", sizeof(uint32_t));   
sizeof(uint32_t): 4

但后来我有一个结构:

typedef struct A {
    uint32_t a;
    uint32_t b;
} A;

但是,令人惊讶的是:

> printf("sizeof(A): %zd\n", sizeof(A));
sizeof(A): 16

uint32_t 是否出于某种原因是 8 字节对齐的? 下面真的是8字节类型吗?

它完全取决于您的编译器和体系结构。 在您的情况下,看起来字段确实是8字节对齐,可能是出于性能原因。

我的猜测是,默认情况下,64位架构上的所有内容都将与64位边界对齐,与32位架构相同,所有内容都与4个字节对齐。 您可以指定打包pragma指令以摆脱填充。 例如

#pragma pack(0)

在gcc。

在带有 gcc 和 64 位 CPU 的 linux 上,我得到了你所期望的; 具有两个短整数的结构的大小为 4,两个 32 位整数为 8,两个 64 位整数为 16。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM