我们的应用程序分配几何坐标的大std::vector<> -
它必须是一个向量(意思是连续的),因为它最终被发送到OpenGL来绘制模型。
Open处理连续数据。
在某个时刻,分配失败,这意味着保留内存会抛出std::bad_alloc异常。然而,在这个时刻,仍然有许多记忆是自由的。
问题是连续块不能被分配。
所以前两个问题是:
通过将这个大向量分割成多个向量并为每个向量调用一次OpenGL,可以部分地解决上述问题。
然而,仍然存在一个问题,即如何定义每个较小向量的大小--如果有大量的向量具有相当小的大小,我们几乎可以肯定这是合适的内存,但是会有大量调用OpenGL,这会减慢可视化速度。
发布于 2012-05-04 07:19:29
在32位地址空间内,不能超过连续内存的~600 go。编译为64位,并在64位平台上运行它来解决这个问题(希望永远如此)。
尽管如此,如果您有如此苛刻的内存需求,则应该查看自定义分配器。您可以使用以磁盘为背景的分配,该分配将在矢量中显示为基于内存的存储。您可以为OpenGL映射文件。
发布于 2012-05-04 06:31:11
如果堆碎片确实是您的主要问题,并且运行在Windows上,那么您可能希望在http://msdn.microsoft.com/en-us/library/windows/desktop/aa366750(v=vs.85).aspx中研究低碎片堆选项
https://stackoverflow.com/questions/10442078
复制相似问题