gcc是否将expect
之后的3个填充字节归零?
c.b
答案 0 :(得分:3)
不一定。在带有-O2
的x86-64上的gcc 10.1,此代码(also on godbolt)
struct foo {
int a;
char b;
};
void blah(struct foo *p);
void foo(void) {
struct foo c = { 1, 2};
blah(&c);
}
编译为该程序集
foo:
subq $24, %rsp
leaq 8(%rsp), %rdi
movl $1, 8(%rsp)
movb $2, 12(%rsp)
call blah
addq $24, %rsp
ret
您会看到最后三个字节未初始化。