0

我们的应用程序分配几何坐标的大 std::vector<> -
它必须是一个向量(这意味着连续),因为它最终发送到 OpenGL 以绘制模型。
Open GL 可以处理连续数据。
在某些时候分配失败,这意味着保留内存会引发 std::bad_alloc 异常。但是,此时仍有大量内存可用。
问题是无法分配连续块。
所以第一个两个问题是:

  • 有没有办法控制 CRT 分配内存的方式?或者一种对其进行碎片整理的方法(疯狂的想法))..

  • 也许有一种方法可以检查运行时是否可以分配一定大小的内存块(不使用 try/catch)。

上述问题通过将这个大向量分割成几个向量并为每个向量调用一次 OpenGL 得到了部分解决。
然而,如何定义每个较小向量的大小仍然存在一个问题——如果有很多大小相当小的向量,我们几乎可以肯定适合内存,但会有很多对 OpenGL 的调用,这会减慢可视化速度。

4

2 回答 2

1

You can't go beyond ~600MiB of contiguous memory in a 32-bit address space. Compile as 64-bit and run it on a 64-bit platform to get around this (hopefully forever).

That said, if you have such demanding memory requirements, you should look into a custom allocator. You can use a disk-backed allocation that will appear to the vector as memory-based storage. You can mmap the file for OpenGL.

于 2012-05-04T07:19:29.333 回答
0

如果堆碎片确实是您的问题,并且您在 Windows 上运行,那么您可能想在http://msdn.microsoft.com/en-us/library/windows/desktop/aa366750(v =vs.85).aspx

于 2012-05-04T06:31:11.190 回答