我们的应用程序分配大型std :: vector<>几何坐标 -
它必须是一个向量(这意味着连续),因为它最终发送到OpenGL来绘制模型
Open GL可以处理连续的数据
在某些时刻分配失败,这意味着保留内存会抛出std :: bad_alloc异常。
但是目前还有很多记忆仍然是免费的
问题是无法分配连续块
所以前两个问题是:
有没有办法控制CRT分配内存的方式?或者一种对它进行碎片整理的方法(疯狂的想法))..
也许有办法检查运行时间是否可以分配某种大小的内存块(不使用try / catch)。
上面的问题部分通过将这个大向量分解为几个向量并为每个向量调用一次OpenGL来解决 然而,仍然存在如何定义每个较小向量的大小的问题 - 如果有很多它们具有相当小的大小,我们几乎确定适合内存但是会有很多调用OpenGL会降低可视化速度。
答案 0 :(得分:1)
在32位地址空间中,您不能超过~600MiB的连续内存。编译为64位并在64位平台上运行以解决此问题(希望永远)。
也就是说,如果你有这么苛刻的内存要求,你应该研究一下自定义分配器。您可以使用磁盘支持的分配,该分配将向量显示为基于内存的存储。您可以为OpenGL创建mmap文件。
答案 1 :(得分:0)
如果堆碎片确实是您的问题,并且您在Windows上运行,那么您可能希望调查http://msdn.microsoft.com/en-us/library/windows/desktop/aa366750(v=vs.85).aspx处的低碎片堆选项