通过从C++中删除字符串中的垃圾字符来优化大小

Rom*_*man 4 c++ optimization

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

#include <iostream>
int main() {
    std::cout<<"Hello World";
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Tat*_*shi 5

对齐发生在这里.

默认情况下,链接器将页面大小(4K)对齐.见下面的参考:

如何在GNU中指定ELF节对齐?

如何更改ELF中的代码段对齐方式

还有代码对齐(指令对齐)会大大影响性能,但这与字符串文字无关,所以我将在此处省略.