C ++阵列在内存中的存储位置

时间:2015-04-08 07:27:22

标签: c++ arrays

我理解在C ++中调用new相当于在C中调用malloc,并且在调用free时可以释放malloc函数返回的指针。通过调用'new'int [length]获得的数组存储在堆中。但是,如果静态数组如int x [3] = {1,2,3};被宣布?这样的数组将存储在哪里?栈?

3 个答案:

答案 0 :(得分:2)

静态数组(在全局范围或命名空间中声明)将放置在数据段中。 在函数作用域内声明的局部数组将放在堆栈上。

int g_global_array[2] = {4,5,6};  //Data Segment
int main() {
     int local_array[3] = {1,2,3};  //Stack
     static int s_static = 10; //Also in the Data Segment (static)
     return 0;
}

(与普通老C相同)

http://www.geeksforgeeks.org/memory-layout-of-c-program/

答案 1 :(得分:1)

是的,以这种方式声明的本地数组将存储在堆栈中并具有固定的长度。

答案 2 :(得分:1)

堆栈中寻址本地数组。有一个恒定的大小,不能增加。 如果在数组中写入的值多于它可以包含的值,则会出现所谓的堆栈溢出。在他们的领域后面,有其他值的记忆,然后将被覆盖。 Visual Studio会创建一些保护字节以避免这种情况。