gpt4 book ai didi

c - char指针和数组的栈指针区别

转载 作者:行者123 更新时间:2023-12-01 14:59:36 25 4
gpt4 key购买 nike

我有一个 char数组如下:

 char buffer[100]

还有一个 char指针如下:
 char *buffer
buffer = malloc(100)

当我使用 GDB检查堆栈指针,它们实际上是不同的。为什么?

最佳答案

那是因为 char buffer[100]将被分配到堆栈上,将占用 100 字节的存储空间。因此堆栈指针esp/rsp将指向较低的内存(堆栈向下增长)

 +-    +------------+   <-- ebp
| | |
b +------------+
u | |
f +------------+
f | | holds 100 elements of buffer array
e +------------+
r .
.
a .
r +------------+
r | |
+- +------------+ <-- esp

char *buffer 的情况下只有一个 char *类型对象的内存 ( sizeof (char *) ) 将在堆栈上分配。当你这样做 buffer = malloc (100)将返回保证 100 字节的内存块的基地址。这个分配的内存通常取自堆。所以现在 buffer保存刚刚分配的内存块的基地址。所以,在这种情况下,因为内存来自堆,而堆栈只保存 char *类型对象,因此堆栈指针位于更高的位置(使堆栈向下增长)
    +------------+   <-- ebp
| 0xabcd | buffer , char * type
+-----+------+ <-- esp
|
|
| 0xabcd 0xabce
| +-----+-----+-----+ +-----+-----+
+------------>| | | | . . . | | |
+-----+-----+-----+ +-----+-----+
0xabcf . . .

| |
+------ 100 bytes mem block in heap --+

另请注意 Richard J. Ross III 的评论。

关于c - char指针和数组的栈指针区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12760229/

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