小编Shu*_*ham的帖子

为什么我的缓冲区在堆栈上分配的内存比我要求的多?

这是我的源代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 500

int main(int argc, char** argv)
{
        if (argc != 2)
                exit(1);
        char str[MAX];
        strcpy(str, argv[1]);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

disas使用并得到了以下结果maingdb

Dump of assembler code for function main:
   0x0000000000001145 <+0>:     push   %rbp
   0x0000000000001146 <+1>:     mov    %rsp,%rbp
   0x0000000000001149 <+4>:     sub    $0x210,%rsp
   .
   .
   .
End of assembler dump.
Run Code Online (Sandbox Code Playgroud)

这里值得注意的是:

0x0000000000001149 <+4>: sub $0x210,%rsp

我的问题是-
为什么会出现$0x210(528 字节),而它应该是$0x1f4(500 字节),正如我所要求的?

c assembly x86-64 stack-memory

4
推荐指数
1
解决办法
354
查看次数

标签 统计

assembly ×1

c ×1

stack-memory ×1

x86-64 ×1