Warm tip: This article is reproduced from serverfault.com, please click

assembly-为什么GCC为C数组分配了过多的堆栈空间

(assembly - Why is GCC allocating too much stack space for a C array)

发布于 2020-11-30 22:58:51

考虑以下程序:

int main()
{
   int arr[8];
}

在Linux 20上使用gcc 9.3.0进行编译时,文件的反汇编在开始时看起来像这样(这不是上面代码的整体汇编!):

┌ 72: int dbg.main (int argc, char **argv, char **envp);
│           ; var int[8] arr @ rbp-0x30
│           ; var int64_t canary @ rbp-0x8
│           0x00001169      f30f1efa       endbr64                     ; test.c:2 { ; int main();
│           0x0000116d      55             push rbp
│           0x0000116e      4889e5         mov rbp, rsp
│           0x00001171      4883ec30       sub rsp, 0x30

arr只有8个int = 8 * 4个字节长(sub rsp, 0x30时,为什么汇编程序会在堆栈上分配0x30 = 48个字节

Questioner
Hell stormer
Viewed
0
Nate Eldredge 2020-12-01 07:08:47

那是:

总计:48个字节。