关于C#:ARMCC删除未使用的变量

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版本中。