我有一个小问题 - 当我像这样定义数组时:
int arr[10];
我做了类似的事情:
func(arr);
我知道arr是通过引用发送的,而不是通过值发送的,但是,它是否表示数组在堆中?不,当然不。 它是如何在堆栈中工作的? 谢谢!
答案 0 :(得分:4)
它在堆栈中或在bss中(未初始化的数据部分)。在任何情况下,传递给func的是指向数组第一个元素地址的指针,通过它可以索引所有其他元素。将指针视为映射到RAM存储器中特定位置的整数,例如字节粒度的GPS坐标或类似的东西。该地址可以位于内存中的任何位置,而不仅仅是堆。只是我的2cents
答案 1 :(得分:1)
对于数组,内存将在编译时自行分配,内存空间将在堆栈中分配。 如果使用指针,则应动态分配内存,并在堆内存中分配内存空间。
答案 2 :(得分:0)
编译并运行代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[10];
printf("arr = %p\n",arr);
sleep(50);
exit(0);
}
后面跟着pmap PID_of_the_process给了我:
<00> 00007f68a084b000 8K rw --- [anon]00007fff4a991000 84K rw --- [stack]
<00> 00007fff4a9ff000 4K r-x-- [anon]ffffffffff600000 4K r-x-- [anon]
由于代码正在打印: arr = 0x7fff4a9a4480
它显示arr在此处分配在堆栈上。
希望这有帮助。