g++编译器标志以最小化二进制大小
g++ compiler flag to minimize binary size
我有一个Arduino Uno R3。我正在使用C++为我的每个传感器制作逻辑对象。Arduino的板载内存非常有限,32KB*,平均而言,我编译的对象大约是6KB*。
我已经在使用所需的尽可能小的数据类型,以尽量减少内存占用。是否有编译器标志来最小化二进制文件的大小,或者我是否需要使用较短的变量和函数名、较少的函数等来最小化我的代码库?
此外,对于最小化二进制大小的任何其他提示或建议都将不胜感激。
*它可能不是以KB为单位测量的(因为我面前没有它(,但1个对象大约是我总内存大小的1/5,这引起了我的担忧。
除了us2012
和其他在评论中提到的技术外,还有很多减少二进制大小的技术,我用自己的一些观点总结了这些技术:
- 使用
-Os
使gcc/g++对大小进行优化 - 使用
-ffunction-sections -fdata-sections
将每个函数或数据分离为翻译单元中不同的部分。将它与链接器选项-Wl,--gc-sections
结合起来,可以去掉任何未引用的部分 - 至少使用以下选项运行
strip
:-s -R .comment -R .gnu.version
。它可以与--strip-unneeded
组合,以移除不需要重新定位处理的所有符号
如果您的代码不包含c++-异常处理,您可以节省大量空间(在Tuxdude提到的所有优化步骤之后,最多可以节省30k(。因此,您必须提供以下标志:-fno-exceptions
但是甚至如果不使用异常,则可以包括异常处理!检查以下步骤:
-
no usage of new, delete
。如果你真的需要它,用malloc/free包装代替它们。例如,搜索"tinynew.cpp"> -
为纯虚拟呼叫提供功能,例如
extern "C" void __cxa_pure_virtual() { while(1); }
- 覆盖__gn_cxx::__verbose_terminate_handler((。它处理未处理的异常,并进行名称去映射,这是相当大的!(例如,具有9.5k的d_print_comp.part.10或具有1.8k的d_type(
干杯Flo
相关文章:
- 找到两对数字,使它们的乘积的绝对差最小化
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 超轻 - 如何最小化窗口
- 在C++中使用 GSL 最小化
- 在C++中最小化变量的范围
- 当只有一个线程主要使用该对象而其他线程很少使用它时,如何最小化该对象的互斥锁锁定?
- "最小化"按钮不会出现在 MFC 对话框中
- 从小于或等于某个 N 的数字列表中最小化或找到 n 个理想的子集和
- 如何排列二进制字符串以最小化它们之间的距离
- 最小化 C++ 中的内存使用
- 禁用 GPO 的空气抖动最小化
- 如何隐藏最大化和最小化按钮并在qml应用程序窗口中显示关闭按钮?
- 如何使用 stl 最小化 c++ 中所有打开的窗口
- 如何最小化嵌入式平台上的内存分配
- 可见程序或最小化程序时的过程ID更改
- 删除/最小化GIT合并冲突
- 当模式窗口最小化时,最小化所有应用程序窗口(在 Linux 上)
- 应用程序最小化时单击显示桌面/最小化全部
- 如何在Qt中打开外部应用程序并将其最小化到系统托盘
- g++编译器标志以最小化二进制大小