大型程序启动慢

Slow start-up of large programs

下面的程序

#include <stdio.h>

int main() {
    static char a[1 << 28] = {1};
    printf("%d\n", a[0]);
    return 0;
}

在 Windows 7 x64 上编译为这个可执行文件

19/06/2015  21:57       268,519,936 a.exe

运行 需要 5.6 秒,即使连续 运行 几次以确保它已缓存在内存中。

我原以为 Windows 要么在开始时读入整个可执行文件(在这种情况下,机器能够以每秒数百兆字节的速度进行流式读取),要么只翻页需要(在这种情况下应该只读取几千字节);无论哪种方式,程序都应该在几分之一秒内 运行 。如果您调整数组大小,运行时间与可执行文件的大小成正比,因此 Windows 的行为就好像它正在读取整个可执行文件,但通过一些非常慢的方法。

这种行为的原因是什么,有什么可以解决的吗?

事实证明,延迟是 Microsoft 防病毒程序在每次 运行 时扫描可执行文件。禁用对该文件的保护会将时间缩短到 47 毫秒。