【发布时间】:2015-06-13 01:07:15
【问题描述】:
我理解C++中调用new相当于C中调用malloc,调用free时可以释放malloc函数返回的指针。调用 'new' int[length] 得到的数组存储在堆中。但是,如果一个静态数组,例如 int x[3] = {1,2,3};被宣布?这样的数组将存储在哪里?堆栈?
【问题讨论】:
我理解C++中调用new相当于C中调用malloc,调用free时可以释放malloc函数返回的指针。调用 'new' int[length] 得到的数组存储在堆中。但是,如果一个静态数组,例如 int x[3] = {1,2,3};被宣布?这样的数组将存储在哪里?堆栈?
【问题讨论】:
在堆栈中寻址本地数组。有一个无法增加的恒定大小。 如果你在数组中写入的值超过了它可以包含的值,就会出现所谓的堆栈溢出。在它们的字段后面,有其他值的内存,这些值将被覆盖。 Visual Studio 会创建一些保护字节来避免这种情况。
【讨论】:
一个静态数组(在全局范围或命名空间中声明)将被放置在数据段中。 在函数范围内声明的本地数组将被放置在堆栈上。
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 相同)
【讨论】:
是的,以这种方式声明的本地数组将存储在堆栈中并具有固定长度。
【讨论】: