【问题标题】:I need to reduce text segment of all object files used in my project我需要减少项目中使用的所有目标文件的文本段
【发布时间】:2019-11-20 07:08:47
【问题描述】:

我的项目要求是减少项目中使用的目标文件的文本段。我尝试减少冗余逻辑,但更改结果是最小字节数。

我的代码使用 switch 案例,嵌套 if/else,以及 const 数组和 for/while 循环。它还包含信号量、互斥锁等。

您能否建议减少文本段中使用的最大指令的最佳解决方案?

【问题讨论】:

  • 您使用了哪些链接时间优化?
  • 对此没有一个简单或单一的答案。您可以使用编译器和链接器标志来启用节省空间的优化(但这些可能会导致“更慢”的代码)。或者您可以减少实际的源代码,这可能导致代码不可读和不可维护。您可以使用较少的常量变量,这些变量可以放入文本段。或者可能是无数其他事物,或者许多事物的组合。但重要的一点是要记住,无论你做什么,这都是一种权衡。你在文本段大小上赢了一些,但在其他方面松了。
  • 虽然当前形式的这个问题很模糊,而且范围很广,但我对需求本身很好奇?项目是什么?你的目标平台是什么?最重要的是,你为什么有这个要求,它来自哪里?它应该解决的根本问题是什么?
  • @JAINILPANDYA 你在编写什么代码需要 2gb 的内存?以及您为什么要问降低文本段,而这显然是您从磁盘加载或从占用 2GB 内存的代码生成的内容。
  • 您是否自定义了链接器文件?您是否剥离了可执行文件?为 32 位目标构建?并且考虑到不是很多年前,许多 Linux 系统通常使用不到一个 GiB 或 RAM 运行,也许您的代码从一开始就设计得很糟糕?它会做很多动态内存分配吗?包含大型数组?这听起来更像是一个系统集成问题,而不是单个程序的问题(除非它的实现或设计不当)。

标签: c linux optimization memory memory-management


【解决方案1】:

针对大小进行优化。如果您使用 GCC,请使用标志 -Os,它指示 GCC“优化大小”。它启用所有不会增加可执行文件大小的 -O2 优化,然后它还切换一些优化标志以进一步减小可执行文件大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 2011-05-30
    • 2014-08-12
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    相关资源
    最近更新 更多