伺服器3D場景建模(八) 四叉樹的記憶體優化

2021-08-19 20:55:03 字數 1966 閱讀 7708

四叉樹節點的**與合併比較頻繁,如果直接 new、delete,相對比較慢。

因此有比較做下記憶體優化

自己寫的記憶體分配器,不一定夠完美、或者使用者有自己的記憶體分配策略。

需要定義下基類,方便別人可以組裝自己的記憶體分配器。

**如下:

template

class membase

virtual ~membase() {}

virtual

void* _alloc(size_t size) = 0;

virtual

void _free(void* ptr) = 0;

template

inline t* new(args... args)

inline

void delete(t* ptr)

};

繼承 membase,並實現 _alloc、_free函式的,都可以組裝到四叉樹上。

四叉樹定義如下:

templateclass quadtree

talloc提供了組裝自定義記憶體分配器介面

簡單的new方式一些物件,並組成乙個物件池的話,記憶體碎片會比較嚴重。

可以需要時,每次預先分配一大塊記憶體。再在大塊記憶體上,切出乙個個物件位址。

這樣可以比較有效的減緩記憶體碎片現象。

**如下:

template

t, unsigned blocksize = 4096>

class

blocks : public membase

~blocks

()

}inline void* _alloc(size_t

size)

void* ptr = mhead;

mhead = mhead->next;

return ptr;

}inline void _free(void* ptr)

private:

void newblock()

else

ptr = ptr + 1;

#define ptr

(n)((item*)

((char*)ptr + (n) * sizeof(t)))

mhead = ptr

(0);

size_t lstindex = (blocksize - sizeof(item)) / sizeof(t) - 1;

for (size_t

i = 0; i

< lstindex; i++)

ptr(lstindex)->next = nullptr;

#undef ptr

}struct item

;item* mblocks;

item* mhead;

tmallocfunc mmalloc;

tfreefunc mfree;

};

物件池不夠用時,繼續分配塊;有塊組成物件池。在塊上做鍊錶,這樣可以方便的得到下個物件位址。

記憶體對齊,讓cpu可以1次獲取字段資料。

**如下:

如圖,new/delete的方式很慢。

記憶體對齊的方式最快。

據說,記憶體對齊的優勢是在訪問物件欄位時,因此本測試還未完全測試出其效果。

測試**:

記憶體分配相關,本人也了解不多。

人臉掃瞄建模 3D建模 新手3D建模設計知識點

3d建模設計職業 如今,3d建模被廣泛應用於各個領域。醫療行業使用詳細的器官3d模型,包括來自ct或mri掃瞄的2 d影象切片。建築師和工程師還利用3d軟體程式來展示擬議的建築,景觀,裝置,結構,車輛等。甚至科學家也開始使用3d地質模型。例如,學家利用它們來 由於板塊,侵蝕等引起的地殼內部事件。當然...

3D場景優化

一 有效的效能評測 對於任何乙個3d應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評測,找出瓶頸,對症下藥。對於...

3D 架設場景

指定視口 glviewport 指定投影變換 glmatrixmode gl projection glloadidentity gluperspective 30,1,0.1,50 指定檢視變換 glmatrixmode gl modelview glloadidentity glulookat ...