我有一個代碼,其中包含大量的malloc
和特定於設備的API malloc(我正在GPU上編程,所以cudaMalloc
)。連續分配器/解除分配器
基本上我的代碼開始的結尾是一個分配調用的大雜燴,而我的關閉部分是釋放調用。因爲我已經將我的全局數據封裝在結構中,所以釋放時間很長,但至少我可以將它們分解爲一個單獨的函數。另一方面,我想要一個更短的解決方案。此外,如果我忘記在全局分配器函數中明確寫入釋放,自動釋放器將降低創建內存泄漏的風險。
我想知道是否可以編寫某種模板類包裝,它可以允許我在malloc
/cudaMalloc
過程中「註冊」變量,然後在模擬結束時執行基於質量循環取消分配(取消註冊)。爲了清楚起見,我不想輸入個別的釋放(free
/cudaFree
s),因爲這又長又不合要求,並且假設我註冊的任何東西都不會被釋放,直到設備模擬完成並且主要正在終止。
這裏的一個好處是,如果我註冊一個新的模擬持續時間變量,它會自動釋放,所以沒有我忘記釋放它並創建內存泄漏的危險。
這樣的包裝可能嗎?
你會建議嗎?
如果是這樣,怎麼樣?
在此先感謝!
老問題,但CUDA給它一個新的味道。有趣。 – 2012-02-28 07:28:09
你喜歡C++的答案還是你的「C」標籤故意? – harrism 2012-02-28 10:12:05
它應該是C++。最初這個項目是用C語言編寫的,但是我在主機端添加了一些STL的東西,因爲它在我的腦海中提供了更簡潔的打印控制。設備代碼和分配/釋放都是傳統的C,但沒有classes @存在。 – 2012-02-29 13:52:02