One ELF section per function的意思是,把每个函数做成一个section,以便在链接时去除没有用到的函数。IAR里面不需要这个选项,因为IAR的linker本来就被设计成(缺省情况下)不链接没有用到的函数,所以不需要把每个函数做成一个section这么麻烦。 楼主遇到的代码大小差异,很可能与编译器本身没有关系,而是在IAR里包含了某些只在调试时用到的库,例如EWARM版本4里的runtime control modules, I/O emulation modules,或版本5里的semihosted library,等等,可以仔细查看一下配置。 顺便说一下,如果在代码里调用了printf, vsprintf等I/O库函数,在IAR里可以把它们设置较为精简的版本(例如少支持几种字符串格式),从而急剧减小代码;这是其它工具里都没有见过的。