环境
-m32 -O0
x86-64 clang 12.0.0
x86-64 gcc 10.1
不同
栈帧开辟
int main(){
int a=1;
int b=2;
}
在clang下开辟栈帧的代码是这样的。
pushl %ebp
movl %esp, %ebp
subl $8, %esp
局部变量大小是多少,就开多少
但在gcc下是这样的
pushl %ebp
movl %esp, %ebp
subl $16, %esp
会多出8字节,后续代码就不放了,观察发现gcc生成的栈帧每次都以16字节增加。怎么理解,举个例子,假如某个函数只用int局部变量,用的变量个数小于等于4个,栈帧开辟16字节,变量个数大于4小于等于8,开辟32字节,以此类推。而clang每次生成的大小都正正好。不知道gcc为什么要这样。
标签:gcc,字节,esp,int,不同,clang,ebp From: https://www.cnblogs.com/sorisuto/p/17278576.html