大型程序启动慢
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 毫秒。
下面的程序
#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 毫秒。