我從E.S.R The Lost Art of C Structure Packing閱讀這篇文章,代碼如下(從packtest.c摘錄):gcc pack-struct會決定添加多少個填充到結構中?
$ cat p.c
#include <stdio.h>
struct foo5 {
short s;
char c;
int flip:1;
int nybble:4;
int septet:7;
};
main(int argc, char *argv)
{
printf("sizeof(struct foo5) = %zu\n", sizeof(struct foo5));
}
$ gcc -Wpadded -o p p.c
p.c:9:1: warning: padding struct size to alignment boundary [-Wpadded]
};
^
$ ./p
sizeof(struct foo5) = 8
$ gcc -Wpadded -fpack-struct=2 -o p p.c
p.c:9:1: warning: padding struct size to alignment boundary [-Wpadded]
};
^
$ ./p
sizeof(struct foo5) = 6
那麼有多少尾隨填充到結構將會給出不同的包裝,結構尺寸?我怎麼能用pahole來看看究竟有多少填充?默認的包結構值是8 bytes。
我發現你已經聲明瞭一個(靜態分配在堆棧上)像這樣的'struct foo5 f5;'來獲得pahole的工作,否則pahole將不報告任何內容。 – schemacs