(C ++ 11)静态数组和动态数组与列表初始化之间的区别是什么?

时间:2014-08-15 06:14:30

标签: arrays c++11 memory-management memory-segmentation

例如,有一个包含数千个元素的int数组:

static int st_indices[9999] = {
   0,  27,  26,    1,  41,  71,    0,  26, 101,    0, 101, 131,    0, 131,  72,
   1,  71, 176,    2,  56, 206,    3, 116, 236,    4, 146, 266,    5, 161, 296,
......
};

int* dy_indices = new int[9999] {
   0,  27,  26,    1,  41,  71,    0,  26, 101,    0, 101, 131,    0, 131,  72,
   1,  71, 176,    2,  56, 206,    3, 116, 236,    4, 146, 266,    5, 161, 296,
......
};

上述两种方式之间的区别是什么,尤其是内存使用情况下大括号中的值?

我知道在程序结束(STACK)之前st_indices会在内存中生效,而dy_indices将在delete [](HEAP)之后释放。或者这是关于堆栈与.DATA段的问题?

2 个答案:

答案 0 :(得分:0)

静态在编译时完成..(设置内存量,又称STACK)

动态在运行时完成(动态分配,可以是任何大小,具体取决于系统限制,也称为HEAP)

答案 1 :(得分:0)

@Dr.Kameleon's answer,我了解到操作系统将读取可执行文件的内容,并将其加载到内存中。

即花括号中的数据将被加载到.TEXT内存段中。如果我们不考虑虚拟内存/分页,将数据放入文件然后读入,将减少内存使用量(对于OpenGL应用程序)。