Was ist der „richtige“ Weg, um malloc und new in einem gemischten C / C ++ - Programm in Einklang zu bringen?
Ich habe ein gemischtes C / C ++ - Programm. Es enthält einen Flex / Bison-Parser, der auf C abzielt, während der Rest C ++ ist.
Als C verwalten der generierte Parser und Scanner ihren Speicher mitmalloc
, realloc
undfree
. Sie sind gut genug, um Hooks freizulegen, mit denen ich meine eigenen Implementierungen dieser Funktionen einreichen kann. Wie zu erwarten, "möchte" der Rest des (C ++) - Programmsnew
, delete
, usw.
Ein bisschen Nachforschungen scheinen zu zeigen, dass die einschlägigen Normen nicht garantieren, dass ein solches Mischen funktionieren sollte. Insbesondere der C "Heap" ist nicht unbedingt der C ++ "freie Bereich". Es scheint, als könnten sich die beiden Schemata gegenseitig mit Füßen treten.
Darüber hinaus wird dieses Programm eines Tages (bald) wahrscheinlich eine angepasste Heap-Implementierung integrieren wollen, wie ztcmalloc, wird sowohl von C als auch von C ++ verwendet.
Was ist hier das "Richtige"?
Aus dem Wunsch heraus, tcmalloc (in dem erklärt wird, wie man mit C-Programmen verknüpft) in die C ++ - Speicherverwaltung zu integrieren, bin ich versucht, eine Art Cross-Type-Cross-Thread-Cross-Everything-Überladung / Hook / whatever zu finden. Damit könnte ich alle C ++ - Zuordnungs- / Freigabeaufrufe auf ihre C-Äquivalente zurückführen (die wiederum auf tcmalloc landen).
Gibt es einen solchen pan-galaktischen globalen C ++ - Hook? Könnte es schon sein, was ich will, ähnlich wieios_base::sync_with_stdio
heiratet heimlich iostream und stdio standardmäßig?
Ich bin nicht daran interessiert, über stdio vs. iostreams zu sprechen, noch über das Umschalten von Parsergeneratoren oder die Verwendung der C ++ - Flex / Bison-Skelette (sie verursachen eigenständige Kopfschmerzen).
BEARBEITEN: Bitte geben Sie die Namen der Abschnitte des C ++ - Standards an, die Ihre Antwort unterstützen.