0

在我的计算机中,这个 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];
}
4

1 回答 1

7

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

于 2013-09-02T15:56:32.483 回答