0

例如,有一个包含数千个元素的 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,
......
};

以上两种方式有什么区别,特别是大括号中的内存使用值?

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

4

2 回答 2

0

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

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

于 2014-08-15T18:39:02.357 回答
0

静态在编译时完成..(设置内存量,又名堆栈)

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

于 2014-08-15T06:15:55.807 回答