簡體   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