在 gcc 编译器填充后,如何获得包含我所有结构的列表? 假设我的代码包含以下结构:
typedef struct{
char a;
int b;
} struct_i;
希望的输出是(对于我代码中的所有结构):
typedef struct{
char a;
char padding[3];
int b;
} struct_i;
目的是分析,可能考虑结构成员重排,减少用于填充的内存。
最佳答案
只有部分答案:如果您只对信息感兴趣(无法反馈结构),您可以使用带有以下选项的 clang:
clang -c my prog.c -Xclang -fdump-record-layouts
例如下面的代码
#include <stdio.h>
struct foo{
char c;
int i;
};
int main()
{
struct foo bar = {'a',42};
printf("%d\n%d\n",(int)bar.c,bar.i);
return 0;
}
产生
> clang -c foo.c -Xclang -fdump-record-layouts
*** Dumping AST Record Layout
0 | struct foo
0 | char c
4 | int i
| [sizeof=8, align=4]
*** Dumping IRgen Record Layout Record: RecordDecl 0x7f80fe0a47e0 <foo.c:2:1, line:5:1> line:2:8 struct foo definition |-FieldDecl
0x7f80fe0a48a0 <line:3:2, col:7> col:7 referenced c 'char' `-FieldDecl
0x7f80fe0a4900 <line:4:2, col:7> col:7 referenced i 'int'
Layout: <CGRecordLayout
LLVMType:%struct.foo = type { i8, i32 }
IsZeroInitializable:1
BitFields:[
]>
关于c - Gcc 填充结构列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48868130/