C/C++ プログラムが混在しています。C を対象とする flex/bison パーサーが含まれていますが、残りは C++ です。
C であるため、生成されたパーサーとスキャナーはmalloc
、 、realloc
および でメモリを管理しますfree
。それらは、フックを公開して、これらの関数の独自の実装を送信できるようにするのに十分です。ご想像のとおり、(C++) プログラムの残りの部分ではnew
、delete
、 などを使用する必要があります。
少し調べてみると、関連する規格がそのような混合が機能することを保証していないことが示されているようです。特に、C の「ヒープ」は必ずしも C++ の「空き領域」とは限りません。2 つのスキームは互いに踏みにじることができるようです。
これに加えて、いつか (近いうちに) このプログラムは、C と C++ の両方で使用されるtcmallocなどのカスタマイズされたヒープ実装を統合する必要があるでしょう。
ここで「正しい」ことは何ですか?
tcmalloc (C プログラムとのリンク方法を説明しています) を統合したいという願望を考えると、クロスタイプ、クロススレッド、クロスオーバーロード/フックなどを C++ メモリ管理に見つけたいと思っています。これにより、すべての C++ の割り当て/解放呼び出しを C の同等のものに戻すことができます (これが tcmalloc に到達します)。
そのような銀河全体のグローバルな C++ フックは存在しますか? ios_base::sync_with_stdio
デフォルトで iostream と stdio を密かに結合する方法と同様に、すでに私が望むことを行っているのでしょうか?
stdio と iostream の話にも、パーサー ジェネレーターの切り替えにも、C++ flex/bison スケルトンの使用にも興味がありません (これらは独立した頭痛の種です)。
EDIT : あなたの回答をサポートする C++ 標準のセクションの名前を含めてください。