So ersetzen Sie die Standardspeicherzuweisung global durch benutzerdefinierte Implementierungen
Trotz früherer Diskussionen zu Stack Overflow können Sie beim globalen Überschreiben des Neuen auf Herausforderungen stoßen und Löschoperatoren mit benutzerdefinierten Implementierungen. Dieser Artikel bietet eine überarbeitete Lösung, die die Standardoperatoren effektiv ersetzt und die konsistente Verwendung Ihres benutzerdefinierten Speichermanagers in Ihrer gesamten Codebasis gewährleistet.
Um diese globale Ersetzung zu erreichen, müssen Sie eine separate Übersetzungseinheit (TU) erstellen, die definiert diese Operatoren. Hier ein Beispiel:
<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>
Im Gegensatz zu regulären Funktionen sind die Deklarationen für „Operator New“ und „Operator Delete“ implizit in der Sprache definiert. Daher benötigen Sie keine separaten Header-Dateien, um sie zu deklarieren. Da Sie jedoch STL verwenden, müssen Sie wahrscheinlich Header wie
Verbesserungen für C 11 und darüber hinaus
In C 11 und höher stehen Ihnen zusätzliche Optionen zur Verfügung zum Definieren dieser Operatoren:
Hier ist Ein Beispiel für eine aktualisierte Operator-Neudefinition mit diesen Verbesserungen:
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false) { // ... Your custom memory allocation logic here }</code>
Indem Sie die TU, die Ihre benutzerdefinierten Operatordefinitionen enthält, in Ihre Codebasis verknüpfen, können Sie die standardmäßigen Neu- und Löschoperatoren global ersetzen. Dadurch wird sichergestellt, dass alle Speicherzuweisungs- und -freigabeaufrufe Ihre benutzerdefinierten Implementierungen verwenden, wodurch Ihre Bedenken hinsichtlich der gemischten Operatornutzung in STL und anderen Bibliotheken ausgeräumt werden.
Das obige ist der detaillierte Inhalt vonWie kann die Standardspeicherzuweisung global durch benutzerdefinierte Implementierungen in C ersetzt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!