Compiler construction 哪种用于Cortex-M4的ARM编译器(ARM none eabi)生成的代码空间最少?

Compiler construction 哪种用于Cortex-M4的ARM编译器(ARM none eabi)生成的代码空间最少?,compiler-construction,arm,space,Compiler Construction,Arm,Space,嗯,我认为标题说明了一切,但网页抱怨消息正文缺失 这里有关于代码空间优化的有价值的讨论,但我想知道什么编译器(GCC、Keil、IAR、CLang等)在这方面做得最好。到目前为止,我已经比较了四个(全部免费),Atmel Studio GCC、Yagarto、CodeSourcery Light和ARM GNU嵌入式工具(可在launchpad.net上找到)。作为源代码,我使用OpenSSL 1.0.1c的一部分,该部分配置为无操作系统,并且经过了处理。对于我使用的优化级别(-O1和-Os),

嗯,我认为标题说明了一切,但网页抱怨消息正文缺失


这里有关于代码空间优化的有价值的讨论,但我想知道什么编译器(GCC、Keil、IAR、CLang等)在这方面做得最好。到目前为止,我已经比较了四个(全部免费),Atmel Studio GCC、Yagarto、CodeSourcery Light和ARM GNU嵌入式工具(可在launchpad.net上找到)。作为源代码,我使用OpenSSL 1.0.1c的一部分,该部分配置为无操作系统,并且经过了处理。对于我使用的优化级别(-O1和-Os),没有很大的区别,大约有10%(470k到520k,-O1)。我想知道是否有编译器能以25%左右的优势击败(主要是gcc)人群。

商用(非免费)的Keil/ARM编译器在代码大小方面可能是最好的。不过,这一比例可能不会比GCC高出25%


要获得真正好的代码大小,您需要查看一些选项,以便积极地删除未使用的代码,例如-ffunction sections-fdata sections-gcc中的gc sections或-armcc中的split sections。

Atmel Studio gcc、Yagarto(newlib)、代码源代码和ARM-GNU嵌入式工具都是gcc。我想,
gcc--version
很重要。也就是说,你已经试过四节gcc了。我不知道是否可以为newlib配置LLVM,但至少可以找到一个不同的代码生成器<代码>-O1不是很有趣<代码>-O2不应创建更多代码<代码>-Os与代码空间最相关。我已经看到,对于不同的编译器,-O2生成的二进制文件比-Os小,所以不要假设编译大小会产生最小的二进制文件。您应该特别从arm获得评估,还有keil、iar和任何其他您可以获得评估的东西……就像任何其他基准测试一样,尽管它严重依赖于您的代码,所以在大小、速度或任何其他方面都不会有“最佳”编译器。最后我检查了一下,RVCT明显优于GCC(我认为RVCT输出的是手臂,GCC输出的是拇指)。其中一些可能是由于大型运行库、YMMV等。但它不是免费的。@tc.那么这有什么关系呢?考虑到问题具体涉及的cortex-m4只支持thumb/thumb2,而不支持arm指令集。重要的是它比arm小(特别奇怪的代码除外),这意味着RVCT拇指