我想在数据段中分配一个大的字符数组,所以我使用了如下代码:
const int size = 1000000000 ;
static char chr [ size ] ;
int main ( )
{
chr [ size - 1 ] = 1 ; // line 1
string s ;
cin >> s ; // line 2
}
第 1 行:我放置这一行是为了让数组至少使用一次,并且不会从编译器中优化
第2行:为了停止执行并检查内存占用例如:在windows的任务管理器中
在 Windows 系统上,结果是当程序卡在第 2 行等待用户输入时,在任务管理器上(在内存和工作集的两列中)进程使用的内存量远小于预期的 1GB。
然后我尝试使用以下代码:
int main ( )
{
for ( int i = 0 ; i < size ; ++ i )
{
chr [ i ] = i ;
}
string s ;
cin >> s ; // line 2
}
现在,当程序到达第 2 行时,内存使用量在快速增长几秒后达到预期的 1GB。
看起来内存是动态分配的,而不是静态分配的。
我对数组/内存模型的理解有误吗?
编译器是否动态分配大量数据以进行优化?
任务管理器是否显示物理分配的内存,因此 1GB 最初分配在硬盘驱动器上直到第一次使用?
最佳答案
操作系统只有在内存被访问后才会分配内存。阅读有关请求分页的信息。
关于c++ - 编译器可以优化在堆上分配静态数组的内存管理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847227/