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