c 14對記憶體分配效能的重大優化

2022-09-23 15:27:09 字數 813 閱讀 5288

1. 本質需求2. 存在的問題3. 解決方案簡述, c++14標準對記憶體優化的描述修改, 會讓編譯器引入類似tcmalloc的記憶體分配優化策略, 而不拘泥於原來的有乙個new語句,就分配一次記憶體的傻傻的情況. 因此有理由相信用c++14的編譯器編譯出來的c++程式在記憶體分配上效能會有較多提公升. 下面的文字**於clang編譯器提供的文件, 我對其主要內容進行了意譯. 個人感覺是, 不再需要引入tcmalloc庫來幫助提公升效能, 直接使用c++14就行了.

需要優化記憶體分配和**

記憶體的分配和**已經成為現代系統很重要的成本.區分記憶體分配優化和呼叫優化好的系統效能需要對應用的動態行為適配不同的分配策略, 或者根據應用提供的線索採用不同的分配策略.當前c/c++標準可能會導致分配策略只考慮與new/delete語句順序有關的事情, 而忽略其他重要的有助於優化的資訊分配策略只考慮為每一句new語句執行分配記憶體的呼叫語句,而忽略分配的優化建議修改標準文件的措辭,使得更加準確的聚焦在本質需求上, 使得某些編譯器和記憶體分配器已經支援的優化行為得到體現,比如tcmalloc.

在某些情況下, 記憶體分配函式的呼叫次數在程式中不能被觀察到. 這樣允許實現者可以減少呼叫的次數(通過避免呼叫或者合併呼叫)避免呼叫或者合併呼叫所分配的空間不會超過**中new語句要求分配的, 只有一種例外,就是為了適應記憶體對齊要求而需要用額外的記憶體填補縫隙.此建議不適用於class-specific 記憶體分配器

建議標準中直接說明實現要遵守data-race free規則, 參考data-race free來歷 和 data-race free原理author: dean

created: 2015-12-27 日 16:17

validate

在模組內對記憶體的分配過早優化的缺點

最近看了 乙個同事 寫的模組,他為了提高程式執行的效率,對記憶體的使用做了很大的優化。通常的做法是,根據自己的需求預先分配了乙個大的記憶體塊,然後分割開來,用鍊錶或者陣列管理起來,需要的時候只需要取出來用就可以,不用的時候就放回去。可以很大程度的減少從glibc分配和釋放記憶體的操作,大大加快了處理...

對C 中動態記憶體分配的認識

動態記憶體分配需要兩個關鍵字 new和delete。1 new new 用來申請記憶體,這個過程稱為建立。宣告形式 new 資料型別 引數 一二適用 這個語句返回乙個指向記憶體首位址的指標。2 delete 宣告形式 delete 指標名 一二適用 delete 用來刪除new分配的動態記憶體空間,...

談對C語言中記憶體分配的理解

在我們學習c語言的過程中,掌握記憶體分配是很有必要的。下面是我對記憶體分配的理解,如有不同的見解,請多多指教。在c語言中,物件可以使用靜態方式和動態的方式分配記憶體空間。靜態分配 編譯器在處理程式源 時分配。一般程式設計師在源 中直接定義了記憶體分配的大小,程式在執行的過程中,不會更改已經分配的空間...