gpt4 book ai didi

C在堆栈上为数组分配的空间大小

转载 作者:行者123 更新时间:2023-12-02 05:43:12 25 4
gpt4 key购买 nike

我有一个名为 demo.c 的简单程序,它在堆栈上为长度为 8 的 char 数组分配空间

#include<stdio.h>


main()
{
char buffer[8];

return 0;
}

我认为将从堆栈中为八个字符分配 8 个字节,但如果我在 gdb 中检查它,则会从堆栈中减去 10 个字节。

我在我的 Ubuntu 32 位机器上用这个命令编译程序:

$ gcc -ggdb -o demo demo.c

然后我分析程序:

$ gdb 演示

$反汇编主体

(gdb) disassemble main
Dump of assembler code for function main:
0x08048404 <+0>: push %ebp
0x08048405 <+1>: mov %esp,%ebp
0x08048407 <+3>: and $0xfffffff0,%esp
0x0804840a <+6>: sub $0x10,%esp
0x0804840d <+9>: mov %gs:0x14,%eax
0x08048413 <+15>: mov %eax,0xc(%esp)
0x08048417 <+19>: xor %eax,%eax
0x08048419 <+21>: mov $0x0,%eax
0x0804841e <+26>: mov 0xc(%esp),%edx
0x08048422 <+30>: xor %gs:0x14,%edx
0x08048429 <+37>: je 0x8048430 <main+44>
0x0804842b <+39>: call 0x8048340 <__stack_chk_fail@plt>
0x08048430 <+44>: leave
0x08048431 <+45>: ret
End of assembler dump.

0x0804840a <+6>: sub $0x10,%esp 表示,从栈中分配了 10 个字节,对吗?

为什么分配了 10 个字节而不是 8 个字节?

最佳答案

不是,0x10表示是十六进制,即1016,十进制是1610字节。

可能是由于堆栈的对齐要求。

关于C在堆栈上为数组分配的空间大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com