我已經做了一些測試來調查堆分配和硬件緩存行爲之間的關係。實證結果具有啓發性,但也可能具有誤導性,特別是在不同的平臺和複雜/不確定性用例之間。堆分配如何傷害硬件緩存命中率?
我感興趣的有兩種情況:批量分配(實現自定義內存池)或隨後的分配(信任os)。
下面是C++
//Consequent allocations
for(auto i = 1000000000; i > 0; i--)
int *ptr = new int(0);
store_ptr_in_some_container(ptr);
//////////////////////////////////////
//Bulk allocation
int *ptr = new int[1000000000];
distribute_indices_to_owners(ptr, 1000000000);
我的問題是這兩個例子分配測試:
當我遍歷所有的人都爲只讀操作,如何將緩存中 內存CPU可能會自行劃分?儘管經驗性的結果(通過批量提供可見的性能提升),但當其他一些相對非常小的批量分配覆蓋了先前分配的緩存時會發生什麼?
爲了避免代碼膨脹並保持代碼的可讀性,將二者混合起來是否合理?
std::vector
,std::list
,std::map
,std::set
哪裏有這些概念?
謝謝你的回答。我知道std :: list字面上完全不同。爲了完整起見,我保留在那裏。除非出現更長的版本,否則我會在幾天內標出最佳狀態。 – diegoperini