非常有意思的问题,网上找到两个回答
第一个说函数本地变量也应该内存对齐:https://bytes.com/topic/c/ans...
第二个说本地变量对齐的代价是非常大的(在3.6.2的开头):https://www.cl.cam.ac.uk/tech...
我自己写了c语言程序
int main(void){
struct A {
int a;
char b;
int c;
};
struct A A1 = {4,5,6};
int a = 1;
char b = 2;
int c = 3;
return 0;
}
然后用gcc编译为汇编后的关键部分为
movl $4, -12(%rbp)
movb $5, -8(%rbp)
movl $6, -4(%rbp)
movl $1, -20(%rbp)
movb $2, -21(%rbp)
movl $3, -16(%rbp)
movl $0, %eax
popq %rbp
可以看到struct确实有内存对齐,但是内部变量之间就没有了。个人猜测函数内部变量如果能做到内存对齐那效率自然是最高的。但是这个的难度很大,因为函数内部的变量有可能不是连续的,而struct内部的东西天然就是连续的
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…