g++ compiler flag to minimize binary size(g ++编译器标志以最小化二进制大小)
问题描述
我有一个 Arduino Uno R3.我正在使用 C++ 为我的每个传感器制作逻辑对象.Arduino 的板载内存非常有限,只有 32KB*,平均而言,我编译的对象大约 6KB*.
I'm have an Arduino Uno R3. I'm making logical objects for each of my sensors using C++. The Arduino has very limited on-board memory 32KB*, and, on average, my compiled objects are coming out around 6KB*.
我已经在使用尽可能少的所需数据类型,以尽量减少我的内存占用.是否有编译器标志来最小化二进制文件的大小,还是我需要使用更短的变量和函数名称、更少的函数等来最小化我的代码库?
I am already using the smallest possible data types required, in an attempt to minimize my memory footprint. Is there a compiler flag to minimize the size of the binary, or do I need to use shorter variable and function names, less functions, etc. to minimize my code base?
此外,任何其他关于最小化二进制大小的提示或建议的话,我们将不胜感激.
Also, any other tips or words of advice for minimizing binary size would be appreciated.
*它可能不是以 KB 为单位衡量的(因为我面前没有它),但 1 个对象大约是我总内存大小的 1/5,这引起了我的担忧.
*It may not be measured in KB (as I don't have it sitting in front of me), but 1 object is approximately 1/5 of my total memory size, which is prompting my concern.
推荐答案
除了评论中提到的 us2012
和其他的,还有很多减少二进制大小的技术,总结一下我自己的观点:
There are lots of techniques to reduce binary size in addition to what us2012
and others mentioned in the comments, summing them up with some points of my own:
- 使用
-Os
使 gcc/g++ 优化大小. - 使用
-ffunction-sections -fdata-sections
将每个函数或数据分成翻译单元内的不同部分.将其与链接器选项-Wl,--gc-sections
结合使用,以删除任何未引用的部分. - 使用至少以下选项运行
strip
:-s -R .comment -R .gnu.version
.可以和--strip-unneeded
结合,去掉所有重定位处理不需要的符号.
- Use
-Os
to make gcc/g++ optimize for size. - Use
-ffunction-sections -fdata-sections
to separate each function or data into distinct sections within the translation unit. Combine it with the linker option-Wl,--gc-sections
to get rid of any unreferenced sections. - Run
strip
with at least the following options:-s -R .comment -R .gnu.version
. It can be combined with--strip-unneeded
to remove all symbols that are not necessary for relocation processing.
这篇关于g ++编译器标志以最小化二进制大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:g ++编译器标志以最小化二进制大小
基础教程推荐
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01