ARMCC删除未使用的变量

时间:2013-02-12 16:00:22

标签: c optimization arm armcc

我正在尝试使用使用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。

2 个答案:

答案 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。