我在windows上使用gcc for arm但它很慢: 编译文件:
#include "stdint.h"
int main ( int argc, char **argv ) {
// code
return 0; // Indicates that everything went well.
}
使用的命令:
bash-3.1$ time C\:/Program\ Files\ \(x86\)/GNU\ Tools\ ARM\ Embedded/5.4\ 2016q3/bin/arm-none-eabi-gcc.exe -c -ftime-report main.c
结果:
bash-3.1$ time C\:/Program\ Files\ \(x86\)/GNU\ Tools\ ARM\ Embedded/5.4\ 2016q3/bin/arm-none-eabi-gcc.exe -c -ftime-report main.c
Execution times (seconds)
phase setup : 0.01 (52%) usr 1538 kB (90%) ggc
phase parsing : 0.01 (26%) usr 127 kB ( 7%) ggc
TOTAL : 0.02 1707 kB
real 0m0.795s
user 0m0.000s
sys 0m0.015s
并且缺少文件:
bash-3.1$ time C\:/Program\ Files\ \(x86\)/GNU\ Tools\ ARM\ Embedded/5.4\ 2016q3/bin/arm-none-eabi-gcc.exe -c -ftime-report main.c
arm-none-eabi-gcc.exe: error: main.c: No such file or directory
arm-none-eabi-gcc.exe: fatal error: no input files
compilation terminated.
real 0m0.123s
user 0m0.000s
sys 0m0.015s
所以我不明白为什么gcc这么慢
Ps:主机是带有ssd和8Go内存的英特尔i7
答案 0 :(得分:0)
我用来加速GCC(以我的情况为http://winlibs.com/的MinGW-w64构建)和MSYS2 shell的一个技巧是使用RAM驱动器。
我使用http://www.ltr-data.se/opencode.html/#ImDisk
中的ImDisk要设置4G的RAM驱动器(将其调整为适合您的系统的值),我运行(在提升的提示下):
imdisk -a -t vm -s 4G -m R: -p "/FS:NTFS /V:RAMDisk /Q /Y" -o rem
MKDIR R:\TEMP
ECHO Y|CACLS R:\ /G Everyone:F /T /C
最后一行是将NTFS权限设置得尽可能简单,以免浪费时间。
然后(作为编译前的普通用户),您需要将TEMP
环境变量指向RAM驱动器。
在命令提示符中(如果您也在同一命令提示符中运行编译器),可以使用以下命令执行此操作:
SET TEMP=R:\TEMP
在您的bash外壳中,可能是这样的:
export TMP=R\:/TEMP
export TEMP=R\:/TEMP
为了进一步加快速度,我还从源代码在同一RAM驱动器上构建了所有软件。
但是,即使您的源位于磁盘(HDD或SSD)上,构建过程编译器也将更快,因为它会定期在临时文件夹中创建(和删除)文件。
答案 1 :(得分:0)
如果您真的想知道什么很慢,请对其进行分析。几年前,在类似情况下,我使用了StraceNT。我不记得确切的命令行。
在我的案例中(使用Cygwin工具),计时表明,Cygwin程序较慢的是文件访问,而跟踪显示,(公司要求的)防病毒软件已挂接到每个系统调用中。
使用密集的优化来编译复杂的程序可能会受到CPU的限制,但是不进行优化就编译hello world完全会受到IO的限制。不管速度慢的原因是什么,都在文件访问中。
同一编译器的不同Windows版本可能更快,也可能不会更快。如果您有足够的RAM使系统不开始交换,则在虚拟机中运行的Linux构建可能会更快(当然,本机Linux会更快)。
使用RAM磁盘可能会加快大型构建的速度(尽管仅在操作系统在管理磁盘高速缓存方面做得中等的情况下)。但是,如果问题是文件I / O系统调用缓慢,而不是文件系统I / O缓慢,那将无济于事。