请问gcc pack-struct决定向结构添加多少填充?

时间:2014-02-08 03:18:19

标签: c gcc struct bit-fields

我从E.S.R The Lost Art of C Structure Packing读到这篇文章,代码如下(摘自packtest.c):

$ 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来确切地看到添加了多少填充?默认的pack-struct值为8 bytes

1 个答案:

答案 0 :(得分:0)

这似乎不是'尾随填充'。 C99说:

  

实现可以分配任何可寻址的存储单元   足以容纳一个位域。

结构中的

位域不需要4个字节。

我猜pahole看不到结构,因为程序没有这些信息。 sizeof运算符获取常量,因此不需要信息。您可以在gdb中尝试info types'以查看该类型是否可用。