[英]64-bit copy from uint32_t[16] array to sequence of uint32_t variables
[英]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.