【问题标题】:Optimization for size through removing garbage characters from strings iin C++通过从 C++ 中的字符串中删除垃圾字符来优化大小
【发布时间】:2017-03-11 11:06:09
【问题描述】:

我有两个版本的 Hello World 程序:

#include <iostream>
int main() {
    std::cout<<"Hello World";
}

#include <iostream>
int main() {
    std::cout<<"Hello World and a very long message";
}

如果执行严格的大小优化,我希望这些生成的二进制文件大小不同。但是,当我使用g++ -Os -o test test.cpp -Wl,--strip-all(使用GCC 5.4.0)进行编译时,我得到的文件大小相同(我的系统上为6336,即Ubuntu)。这意味着对于一些最小大小的缓冲区有一些垃圾空间(尽管在这个例子中我希望字符串是const char[])。

我的问题:这个缓冲区的性质是什么以及如何从生成的二进制文件中删除垃圾字符?

【问题讨论】:

  • 指定目标系统可能是个好主意。不同的系统有不同的可执行格式,以及文件各个部分的不同对齐方式或最小大小。

标签: c++ optimization


【解决方案1】:

对齐发生在这里。

默认情况下,链接器会将内容与页面大小 (4K) 对齐。参考如下:

How to specify ELF section alignment in GNU as?

How to change alignment of code segment in ELF

还有代码对齐(指令对齐)对性能影响很大,不过这和字符串字面量无关,这里就省略了。

【讨论】:

  • 如果我编译,例如使用-Wl,-z,max-page-size=32,差异会变得很明显。
猜你喜欢
  • 2013-01-02
  • 2023-03-23
  • 2010-09-09
  • 1970-01-01
  • 2012-07-22
  • 2015-01-28
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多