C++在集合中放置大对象时堆栈溢出

C++ stack overflow when placing a big object in a collection

本文关键字:对象 堆栈 栈溢出 集合 C++      更新时间:2023-10-16

我正在创建一个基于块的引擎,我正在研究无限加载。我已经编辑了一些代码来实现std::unordered_map.但是我在堆栈溢出异常时遇到了问题。这是一个如此大的对象,它不能全部存储在堆栈上。它的大小是:CHUNK_SIZE(32)^3 * WORLD_HEIGHT(8 amount of chunks in height) * 4(block bytes) = 1048576 bytes。(而那个* 225构成了我的世界。

目前正在使用此代码:(我猜是因为它是在堆栈上临时创建的?我应该如何实现这一点?

for(int x = 0; x < size*size; x++){
    loadedChunkContainers.emplace(std::make_pair(x, ChunkContainer()));
}

(我知道你可以用new把它分配到堆上,但每个人都总是告诉我不要这样做。

就地构造那个巨大的对象。
因此,无需复制/移动,只需要最少的堆栈使用。

使用std::piecewise_construct

for(int x = 0; x < size*size; x++)
    loadedChunkContainers.emplace(std::piecewise_construct,
            make_tuple(x), make_tuple());