0
我想了解結構如何對齊。根據this source,我會期望結構C結構對齊
#include<inttypes.h>
#include<stdio.h>
typedef struct {
uint16_t a;
uint16_t b;
uint32_t c;
} test_struct;
int main (int argc, char const *argv[])
{
printf("%lu\n", sizeof(test_struct));
return 0;
}
大小爲12個字節。在我的例子中只需要8個字節。由於它包含一個32位整數,我認爲它應該對齊到4個字節,顯然情況並非如此。
環顧四周後,我發現這個this answer建議,只有成員本身需要對齊。
這完全解釋了我的結構體的大小,但是如何與我的第一個源聲明「一個結構實例將具有最廣泛標量成員的對齊方式」相對應?這是錯的還是我錯過了什麼?
兩個' uint16_t'類型對齊,佔用4個字節; 'uint32_t'對齊4個字節;總數應該是8個字節。每種類型都必須與使用其自己的適當對齊的開始對齊。 –
如果您已將結構順序更改爲'a,c,b',您將得到12,因爲需要在'a'和'c'之間填充/對齊2個字節以符合'c'的需要4字節對齊。 –
該結構對齊到4個字節。你爲什麼認爲它不是? – melpomene