Maison > Article > développement back-end > Comment remplacer globalement l’allocation de mémoire standard par des implémentations personnalisées en C ?
Comment remplacer globalement l'allocation de mémoire standard par des implémentations personnalisées
Malgré les discussions précédentes sur Stack Overflow, vous pouvez rencontrer des difficultés pour remplacer globalement le nouveau et supprimez les opérateurs avec des implémentations personnalisées. Cet article fournit une solution révisée qui remplace efficacement les opérateurs standard et garantit une utilisation cohérente de votre gestionnaire de mémoire personnalisé dans l'ensemble de votre base de code.
Pour réaliser ce remplacement global, vous devez créer une unité de traduction (TU) distincte qui définit ces opérateurs. Voici un exemple :
<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>
Contrairement aux fonctions normales, les déclarations de l'opérateur new et de l'opérateur delete sont implicitement définies dans le langage. Par conséquent, vous n’avez pas besoin de fichiers d’en-tête distincts pour les déclarer. Cependant, puisque vous utilisez STL, vous devrez probablement inclure des en-têtes tels que
Améliorations de C 11 et au-delà
Dans C 11 et versions ultérieures, vous disposez d'options supplémentaires pour définir ces opérateurs :
Voici un exemple de nouvelle définition d'opérateur mise à jour utilisant ces améliorations :
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false) { // ... Your custom memory allocation logic here }</code>
En liant la TU contenant vos définitions d'opérateur personnalisées dans votre base de code, vous pouvez remplacer les opérateurs standard nouveaux et supprimer globalement. Cela garantit que tous les appels d'allocation et de désallocation de mémoire utilisent vos implémentations personnalisées, résolvant ainsi vos préoccupations concernant l'utilisation mixte des opérateurs dans STL et d'autres bibliothèques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!