如何用自訂實現全域替換標準記憶體分配
儘管之前有關於Stack Overflow 的討論,但在全域覆蓋新的記憶體分配時,您可能會遇到挑戰並刪除具有自訂實作的運算子。本文提供了一個修訂後的解決方案,可有效替換標準運算符,並確保在整個程式碼庫中一致使用自訂記憶體管理器。
要實現此全域替換,您需要建立一個單獨的翻譯單元 (TU),它定義這些運營商。下面是一個範例:
<code class="cpp">// optional_ops.cpp void * operator new(std::size_t n) throw(std::bad_alloc) { // ... Your custom memory allocation logic here } void operator delete(void * p) throw() { // ... Your custom memory deallocation logic here }</code>
與常規函數不同,operator new 和operator delete 的聲明是在語言中隱式定義的。因此,您不需要單獨的頭檔來聲明它們。但是,由於您使用 STL,因此您可能需要包含像
C 11 及其他增強功能
在C 11 及更高版本中,您有其他選項用於定義這些運算符:
這裡是使用這些增強功能更新的運算符新定義的範例:
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false) { // ... Your custom memory allocation logic here }</code>
透過將包含自訂運算子定義的TU 連結到程式碼庫中,您可以全域替換標準的new 和刪除運算子。這可確保所有記憶體分配和釋放呼叫都使用您的自訂實現,從而解決您對 STL 和其他庫中混合運算子使用的擔憂。
以上是如何用 C 中的自訂實現全域替換標準記憶體分配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!