例如,有一个包含数千个元素的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段的问题?
答案 0 :(得分:0)
静态在编译时完成..(设置内存量,又称STACK)
动态在运行时完成(动态分配,可以是任何大小,具体取决于系统限制,也称为HEAP)
答案 1 :(得分:0)
从@Dr.Kameleon's answer,我了解到操作系统将读取可执行文件的内容,并将其加载到内存中。
即花括号中的数据将被加载到.TEXT内存段中。如果我们不考虑虚拟内存/分页,将数据放入文件然后读入,将减少内存使用量(对于OpenGL应用程序)。