C 字符指针和数组的堆栈指针差异
我有一个C 字符指针和数组的堆栈指针差异,c,C,我有一个char数组,如下所示: char buffer[100] char *buffer buffer = malloc(100) 另一个char指针如下: char buffer[100] char *buffer buffer = malloc(100) 当我使用检查堆栈指针时,它们实际上是不同的。为什么?这是因为字符缓冲区[100]将在堆栈上分配,这将占用100字节的存储空间。因此,堆栈指针esp/rsp将指向较低的内存(使堆栈向下增长) 还请注意Richard J
char
数组,如下所示:
char buffer[100]
char *buffer
buffer = malloc(100)
另一个char
指针如下:
char buffer[100]
char *buffer
buffer = malloc(100)
当我使用检查堆栈指针时,它们实际上是不同的。为什么?这是因为
字符缓冲区[100]
将在堆栈上分配,这将占用100字节的存储空间。因此,堆栈指针esp
/rsp
将指向较低的内存(使堆栈向下增长)
还请注意Richard J.Ross III的评论。我看到至少有两种不同的方法可以实例化
字符缓冲区[100]
。char buffer[100]
是在char*buffer
的块内还是全局的?您是否在问为什么char buffer[100]
出现在堆栈上而buffer=malloc(100)
没有出现<代码>malloc不会从堆栈中获取内存。C中没有堆栈或堆。这是一个常见的实现,但不是标准所要求的。这个问题将不断出现。我们应该保持这个问题的开放性,关闭其他问题作为DUP,因为这有一个很好的答案(漂亮的图片)。