我最近偶然发现了一个非常奇怪的代码膨胀效应,我真的无法向自己解释......以下是一个工作最小的例子:
#include <array>
const int SIZE = 4000000;
struct Foo
{
static Foo& GetInstance()
{
static Foo instance;
return instance;
}
std::array<float, SIZE> Bar;
};
int main()
{
Foo::GetInstance().Bar[0] = 1.0f;
return 0;
}
生成的二进制文件(使用 GCC MinGW 4.9.2 x86_64 posix sjlj 构建)大小为15.28 MB。但是,如果您设置例如SIZE = 1
,您将获得一个17 KB的二进制文件。
那么为什么二进制的大小取决于这里数组的大小呢?显然,该效果是由结构是单例引起的。然而,我仍然看不出编译器会膨胀二进制文件的任何合理推理。谢谢你的帮助!
(在优化和不优化的情况下-std=c++11
仅使用标志进行测试。顺便说一句,这也发生在 C 样式的数组中......)