gpt4 book ai didi

c++ - 为什么我的二进制文件的大小取决于数组的大小?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:49 27 4
gpt4 key购买 nike

我最近偶然发现了一个非常奇怪的代码膨胀效应,我真的无法向自己解释......下面是一个工作的最小示例:

#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 样式数组中......)

最佳答案

"Apparently, the effect is caused by the struct being a Singleton. Yet I still don't see any plausible reasoning why the compiler would bloat the binary. "

是的,您的观察是正确的。您的单例实例具有静态存储期限。数组的大小决定了二进制代码的大小,这是因为单例对象的所有初始化都是在编译时完成的,并且可能会转到 .text 部分。

但这完全取决于当前使用的编译器实现和优化级别。

关于c++ - 为什么我的二进制文件的大小取决于数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com