【发布时间】:2013-01-27 23:51:41
【问题描述】:
我正在尝试使用使用 ARMCC 编译器的 Keil ARM 工具删除未使用的代码。 我以前为 ARM 使用过基于 GCC 的编译器,我可以通过以下方式轻松删除未使用的代码:
-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。
【问题讨论】:
-
我认为您需要更具体一些。看起来您的代码在多种情况下使用,当您链接它时,您希望删除未使用的代码。即,让编译器或工具警告您静态分析未使用的东西不是您想要的吗?那么有条件地编译或删除变量不是正确的方法吗?
-
我有一个在多个项目之间共享的通用库代码。该库公开了多个接口函数。这些函数也使用内部静态变量。我的项目使用了少量的接口函数,我想删除所有未使用的函数,包括未使用的静态变量。使用 --split_sections 我可以删除函数但不能删除变量。到目前为止,我们公司使用基于 GCC 的编译器,我们不需要为此目的包含条件编译。 GCC 可以删除未使用的代码和数据。我正在寻找来自 ARMCC 的类似功能
-
我会说这是一个答案auselen。
-
这无济于事,因为它仅适用于 FUNCTIONS。链接器对 SECTIONS 执行未使用的代码/数据优化。 ARMCC 中有一个选项“--split_sections”将每个 FUNCTION 放在不同的 SECTION 中。链接器可以稍后对单个 FUNCTION 执行未使用的代码优化,因为每个函数驻留在不同的 SECTION 中。 VARIABLES 没有这样的选项。在 GCC 中,函数和变量有单独的选项:“-fdata-sections -ffunction-sections”。如果我误解了什么,请纠正我。
标签: c optimization arm armcc