ARMCC remove unused variables
我正在尝试使用使用ARMCC编译器的Keil ARM工具删除未使用的代码。
我以前使用过基于GCC的ARM编译器,并且可以使用以下命令轻松删除未使用的代码:
1 | -fdata-sections -ffunction-sections |
对于ARMCC,我发现了类似的标志
1 | --split_sections |
但它仅适用于函数,不适用于变量。
有什么方法可以使用ARMCC删除未使用的变量?
编辑:
例如,给出以下库代码:
1 2 3 4 5 6 7 | lib.c : static int veryBigArray[1000000UL]; int func1() { ... } int func2() { memset(veryBigArray, 0, sizeof(veryBigArray); } |
和我的项目代码:
1 2 3 4 5 6 | project.c: int main(void) { func1(); } |
我想使用编译器/链接器优化删除func2()和veryBigArray。
在大多数情况下,当数据位于其自己的部分时,可以使用--remove作为链接器选项将其删除。 要将数据放置在其自己的部分中,可以创建另一个文件或使用section属性:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0375g/chr1359124982450.html
例如,如果仅在一个函数中使用了全局数据,并且定义了该函数但从未使用过该函数,则将在armcc中自动删除数据,而无需使用--remove。
我说"在大多数情况下"是因为在某些情况下,用户会告诉编译器不对其进行优化。
Arm Compiler版本6(armclang)确实具有-fdata-sections。
我们从ARM支持人员那里得到的官方答复是,当前(ARMCC v5.03 [Build 24])在ARMCC编译器中没有可用的此类选项-他们只是从未考虑过这种情况。
希望它将被添加到将来的ARMCC版本中。