2012-05-04 134 views
0

我們的應用程序分配幾何座標大的std :: vector <>
它必須是一個向量(意思是連續的),因爲它最終發送到OpenGL來繪製模型。
Open GL使用連續的數據。
在某些時候分配失敗,這意味着保留內存會拋出std :: bad_alloc異常。 但是現在有很多內存仍然可用。
問題是連續塊不能分配。
所以第一次兩個問題是:CRT內存分配

  • 有什麼辦法來控制,其中CRT分配內存的方式?或者一個碎片整理方法(瘋狂的想法))..

  • 也許有一種方法來檢查運行時間可以分配一些大小的內存塊(不使用try/catch)。

問題上述部分被這一個大載體片段化到若干向量,併爲他們每個人的調用OpenGL一旦解決。
但是如何定義每個較小的向量的大小還有一個問題 - 如果它們中的很多具有相當小的大小,我們幾乎肯定會適合內存,但是會有很多OpenGL的調用會降低可視化速度。

+0

看看這個鏈接:[自定義分配器來存儲STL向量在OpenGL緩衝區對象](http://stackoverflow.com/questions/8862010/custom-allocator-to-store-stl-vector-in-opengl-buffer對象),就像Cat Plus Plus所說 - 確保你有一個64位的CPU和操作系統:) – paulsm4

+3

切換到64位。 –

回答

1

調查低碎片堆選項您無法超越的連續內存〜600MiB在32位地址空間。編譯爲64位並在64位平臺上運行以解決此問題(希望永遠)。

也就是說,如果你有這樣苛刻的內存要求,你應該看看自定義分配器。您可以使用磁盤支持的分配,該分配對於向量顯示爲基於內存的存儲。您可以將該文件映射到OpenGL。