我知道有一个选项"-Os"来"优化尺寸",但它几乎没有影响,甚至在某些场合增加尺寸:(
strip(或"-s"选项)删除调试符号表,工作正常; 但它只能减少尺寸的小比例.
还有其他方法可以继续吗?
我有一个Arduino Uno R3.我正在使用C++为每个传感器制作逻辑对象.Arduino的板载内存非常有限,只有32KB*,平均来说,我的编译对象大约是6KB*.
我已经在使用所需的最小数据类型,以尽量减少我的内存占用.是否有编译器标志来最小化二进制文件的大小,或者我是否需要使用更短的变量和函数名称,更少的函数等来最小化我的代码库?
此外,还应该理解用于最小化二进制大小的任何其他提示或建议.
*它可能无法用KB测量(因为我没有它坐在我面前),但是1个对象大约是我总内存大小的1/5,这引起了我的关注.
当我编写一个无操作程序时:
int main(void)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
与各种编译器:
GCC(与LLVM类似的结果):提供10-KiB可执行文件(编译-s)
部分:.CRT,.bss,.data,.idata,.rdata,.text,.tls
取决于msvcrt.dll和kernel32.dll
MSVC 2010:获得5.5 KiB可执行文件(编译/MD /Ox)
部分:.data,.rdata,.reloc,.text
取决于msvcr100.dll和kernel32.dll
本来通过合并进一步减少.rdata与.text
Windows驱动程序工具包7.1:提供6.5 KiB可执行文件(编译/MD /Ox,链接msvcrt_winxp.obj以允许它在XP上运行)
部分:.data,.rdata,.text
取决于msvcrt.dll和kernel32.dll
本来通过合并进一步减少.rdata与.text
Windows 2003驱动程序开发工具包:提供3.5 KiB可执行文件
部分:.data,.rdata, …