C++如何在恒定时间内初始化静态vaiables

use*_*732 0 c++ static initialization

这个C++代码零在我的计算机中在大约2毫秒内初始化200M变量,这远非线性时间.C++如何做到这一点?

#include <iostream>
#include <cstdlib>

static char arr[200000000];

int main ()
{
for (int i = 0; i < 10; i++)
    std::cout << (int)arr[rand() % 200000000];
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 7

它没有在零时间内完成.但是你可能会发现很难测量你的应用程序中的时间,因为零初始化发生在"之前main" - 特别是,大多数操作系统支持零初始化,特别是通过在操作系统将其提供给所有内存之前将值分配为零.应用程序,因此应用程序代码中"无需执行任何操作"将其设置为零.但是在没有这样做的操作系统中,之前运行的部分代码main是将所有全局变量(未初始化)设置为零的位.除非您拥有大量的全球数据,否则它的速度非常快.现代处理器可以以5GB/s +的速度填充内存.鉴于您的阵列只有200MB,填充它大约需要0.04秒.