我知道这不是一个编程问题,而是相关的.
我在一个相当大的跨平台项目上工作.在Windows上我使用VC++ 2008.在Linux上我使用gcc.项目中有大约40k个文件.在编译和链接同一个项目时,Windows比Linux慢10到40倍.我该如何解决这个问题?
单个更改增量构建在Linux上为20秒,在Windows上为> 3分钟.为什么?我甚至可以在Linux中安装'gold'链接器,并将时间缩短到7秒.
同样,git在Linux上比Windows快10到40倍.
在git的情况下,git可能不是以最佳方式使用Windows而是使用VC++?你认为微软希望让自己的开发人员尽可能高效,而更快的编译将会有很长的路要走.也许他们试图鼓励开发人员加入C#?
作为简单的测试,找到一个包含大量子文件夹的文件夹并做一个简单的操作
dir /s > c:\list.txt
Run Code Online (Sandbox Code Playgroud)
在Windows上.执行两次并在第二次运行时间,以便从缓存中运行.将文件复制到Linux并执行等效的2次运行并在第二次运行时运行.
ls -R > /tmp/list.txt
Run Code Online (Sandbox Code Playgroud)
我有2个工作站具有完全相同的规格.HP Z600s配备12gig内存,8个内核,3.0ghz.在包含~400k文件的文件夹上,Windows需要40秒,Linux需要<1秒.
我可以设置一个注册表设置来加速Windows吗?是什么赋予了?
一些与编译时间相关的略微相关的链接,不一定是i/o.
显然,在Windows 10(不在Windows 7中)存在一个问题,即关闭进程会持有全局锁定.在使用多个内核进行编译时,因此会遇到多个进程.
该/analyse
选项可能会对perf产生负面影响,因为它会加载Web浏览器.(这里不相关,但很高兴知道)
在单元测试中,我收到以下编译器错误:
The error message indicates as follows:
'fatal error C1063: compiler limit: compiler stack overflow'
Run Code Online (Sandbox Code Playgroud)
这是由某些包含以下内容的标头引起的:
std::vector<unsigned char> GetTestData()
{
return { 0x1, 0x2, 0x3 }; // Very large 500kb of data
}
Run Code Online (Sandbox Code Playgroud)
如何以这种方式使用向量而不会使MSVC崩溃?请注意,该代码在clang和gcc中构建成功。