大中取消分配功能已經提出在C++ 1Y包括。但是我想了解它如何影響/改善當前C++ 低級別的內存管理?大中解除分配功能在C內存管理++ 1Y
此提案在N3778,其中聲明以下意圖。
隨着C++ 11,程序員可以限定一個靜態成員函數操作者 刪除,需要一個尺寸參數指示對象 的大小被刪除。等效的全局操作符delete不可用。 這種遺漏有不幸的表現後果。
現代內存分配器通常在大小類別中進行分配,而對於空間效率的原因,不要在 對象附近存儲對象的大小。取消分配然後需要搜索包含該對象的大小類別 存儲。這種搜索可能很昂貴, ,特別是因爲搜索數據結構通常不在內存 緩存中。解決的辦法是許可的實施和程序員 定義全球運營商的規模的版本刪除。當尺寸版本可用時,編譯器應調用大小版本優先於未版本的 版本。
那麼從上面的段落可以看出,操作符刪除所需的大小信息可以被維護並因此被使用的程序傳遞。這將避免任何搜索的大小,而取消分配。但按我的理解,而分配,內存管理店在某種頭的大小信息(dlmalloc解釋邊界標籤法),這將釋放的同時使用。
T* p = new T();
// Now size information would be stored in the header
// *(char*)(p - 0x4) = size;
// This would be used when we delete the memory????.
delete p;
如果大小信息存儲在標題中,爲什麼取消分配需要搜索它? 它看起來像我缺少明顯的東西,並沒有完全理解這個概念。
此外,此功能如何可在程序在處理C中的低級存儲器管理++一起使用。希望有人能幫助我理解這些概念。
*「,並且出於空間效率原因,不要將對象的大小存儲在對象附近。」*他們正在討論其他分配策略。 – dyp