【问题标题】:ARMCC remove unused variablesARMCC 删除未使用的变量
【发布时间】: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


【解决方案1】:

我们从 ARM 支持部门收到的官方答复是,目前(ARMCC v5.03 [Build 24])在 ARMCC 编译器中没有可用的选项 - 他们只是从未考虑过这种情况。

希望它将被添加到未来的 ARMCC 版本中。

【讨论】:

    【解决方案2】:

    在大多数情况下,当数据位于其自己的部分中时,可以使用 --remove 作为链接器选项来删除未使用的数据。要将数据放在自己的部分中,您可以创建另一个文件或使用 section 属性: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0375g/chr1359124982450.html

    例如,如果全局数据仅在一个函数中使用,并且该函数已定义但从未使用过,则在armcc中自动删除数据,无需--remove。

    我说“在大多数情况下”是因为在某些情况下用户告诉编译器不要专门优化它。

    Arm 编译器版本 6 (armclang) 确实有 -fdata-sections。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多