我遇到了一個問題,需要我以難以預測的方式跟蹤大量資料。我確實知道一些規則,但是這些規則允許我確定何時不再需要某些資料。
我正在考慮使用 acontainers.Map來存盤資料,因為它是以一種有效的方式生成的(因為我無法指定一個足夠大的空矩陣來保存我的所有資料)。然后,我將運行我的代碼,并在每一步中,如果滿足條件,則使用remove(M, keys).
但是,我運行了一個非常基本的測驗,當我洗掉元素時,分配給 Map 的記憶體似乎沒有改變。這是我運行的測驗:
testmap = containers.Map([1,2,3],[11,22,33])
whos testmap % outputs a size of 3x1 as expected and an allocation of 8 Bytes
remove(testmap,[1]);
whos testmap % outputs a size of 2x1 as expected ... but still an allocation of 8 Bytes
我在這里看對了嗎?是否有另一種方法可以繼續擁有可以根據記憶體使用情況動態調整的資料容器?
謝謝。
uj5u.com熱心網友回復:
請注意,即使是空地圖也是 8 個位元組,因此您的測驗并沒有告訴您任何資訊
testmap = containers.Map();
whos testmap
% Name Size Bytes Class Attributes
% testmap 0x1 8 containers.Map
容器本身占用的記憶體很少,我們要從這個問題帶頭來確定關聯地圖資料的大小
testmap = containers.Map(1:10,1:10);
testmap_s = struct(testmap);
whos testmap_s
% Name Size Bytes Class Attributes
% testmap_s 1x1 3809 struct
remove(testmap,{1,2,3,4,5,6,7,8});
testmap_s = struct(testmap);
whos testmap_s
% Name Size Bytes Class Attributes
% testmap_s 1x1 2017 struct
所以是的,這應該適用于您的應用程式,資料將從地圖中清除,并且在適當的時候應該“忘記”由 MATLAB 進行的任何額外記憶體管理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471976.html
下一篇:如何在回圈中存盤字典條目?
