clang和gcc一些不同

发布时间 2023-04-01 14:33:00作者: sorisuto

环境

-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为什么要这样。