数组保存在内存C中的位置

时间:2014-12-18 22:48:49

标签: c arrays stack

我有一个小问题 - 当我像这样定义数组时:

int arr[10];

我做了类似的事情:

func(arr);

我知道arr是通过引用发送的,而不是通过值发送的,但是,它是否表示数组在堆中?不,当然不。 它是如何在堆栈中工作的? 谢谢!

3 个答案:

答案 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在此处分配在堆栈上。

希望这有帮助。