c++14對記憶體分配效能的重大優化
阿新 • • 發佈:2019-01-26
簡述, C++14標準對記憶體優化的描述修改, 會讓編譯器引入類似TCMalloc的記憶體分配優化策略, 而不拘泥於原來的有一個new語句,就分配一次記憶體的傻傻的情況. 因此有理由相信用C++14的編譯器編譯出來的c++程式在記憶體分配上效能會有較多提升. 下面的文字來源於clang編譯器提供的文件, 我對其主要內容進行了意譯. 個人感覺是, 不再需要引入TCMalloc庫來幫助提升效能, 直接使用c++14就行了.
1本質需求
需要優化記憶體分配和回收
- 記憶體的分配和回收已經成為現代系統很重要的成本.
- 區分記憶體分配優化和呼叫優化
- 好的系統性能需要對應用的動態行為適配不同的分配策略, 或者根據應用提供的線索採用不同的分配策略.
2存在的問題
- 當前C/C++標準可能會導致
- 分配策略只考慮與new/delete語句順序有關的事情, 而忽略其他重要的有助於優化的資訊
- 分配策略只考慮為每一句new語句執行分配記憶體的呼叫語句,而忽略分配的優化
3解決方案
建議修改標準文件的措辭,使得更加準確的聚焦在本質需求上, 使得某些編譯器和記憶體分配器已經支援的優化行為得到體現,比如TCMalloc.
- 在某些情況下, 記憶體分配函式的呼叫次數在程式中不能被觀察到. 這樣允許實現者可以減少呼叫的次數(通過避免呼叫或者合併呼叫)
- 避免呼叫或者合併呼叫所分配的空間不會超過程式碼中new語句要求分配的, 只有一種例外,就是為了適應記憶體對齊要求而需要用額外的記憶體填補縫隙.
此建議不適用於class-specific 記憶體分配器