C++在集合中放置大对象时堆栈溢出
C++ stack overflow when placing a big object in a collection
我正在创建一个基于块的引擎,我正在研究无限加载。我已经编辑了一些代码来实现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());
相关文章:
- C++ 在堆栈中包含多态属性的类对象存储
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- C++ 对象数组堆栈溢出
- 作为指针注入类后重新创建堆栈对象不好吗?
- C++包装库:在堆栈上分配C++ C 中的对象
- 对象接收堆栈溢出异常 c++ 的排序向量
- C++析构函数调用两次,堆栈分配的复合对象
- 如何在构建对象堆栈时解决转换错误?
- 堆分配对象中的堆栈对象在 c++ 中在哪里分配?
- C++ - 面试问题中的堆栈上的对象
- 堆还是堆栈用于创建对象?
- C++自己的对象堆栈.在 push() 上复制了什么?
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- 对象向量是否在堆或堆栈上分配C++?
- 使用在堆栈上创建的对象调用虚拟函数
- 如果我使用malloc()而不是堆栈数组,OpenGL不会渲染对象
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 模板堆栈对象的数组;语法
- 小对象堆栈存储,严格混叠规则和未定义行为