c++ - 编译器可以优化在堆上分配静态数组的内存管理吗?

标签 c++ windows static memory-management

我想在数据段中分配一个大的字符数组,所以我使用了如下代码:

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/

相关文章:

php - Magento 静态页面菜单

c++ - 在 Shift/Reduce 解析器生成器中指定 C++11 语法操作函数?

python - 了解反斜杠行为 (Windows)

c# - 静态类引用名

c - 如何使用 lldb 在函数中查找静态变量?

windows - 如何在 PowerShell 中比较两个文件夹并创建缺失的子文件夹

C++读取文件,数组变量矩阵

c++ - opencv 文件中缺少所需的架构 x86_64

c++ - 是否有 C++ 风格指南质量指标?

c++ - Windows 64 位平台上各种数据类型的大小——特别是 sizeof(int)