STLコンテナと文字列を頻繁に使用する大きな(> 250ファイル)ライブラリのソースがあります。限られたヒープを持つ組み込み環境で実行する必要があるため、このライブラリ自体のヒープ使用が制限されているようにしたい。デフォルトのSTLアロケータを置き換えます
明白な解決策はアロケータを作成することですが、アロケータテンプレートパラメータを含むようにコードベース全体を変更することは最後の手段であり、ソースの新しいバージョンを使用したい場合には望ましくありません。 newとdeleteをグローバルに置き換えることは実現不可能です。これは、このライブラリだけでなく、画像全体に影響を与えるためです。
私の次の考えは愚かなCマクロのトリックでしたが、それは可能なようには見えませんが、私は賢いマクロ作者ではないと認めます。
私は "コンパイル時にクラス"というアロケータを指定するコンパイラまたはプラグマスイッチがあると考えましたか?しかし、私は何でもオープンです。
誰かが解決策を思いつくことができたら、このライブラリを構成するファイルセット内の新しい/削除のための同じ方法を実行する方法です。
gcc 3.4.4ツールチェーンを使用してCygwinでこれを実行します
gcc 3.4.4これは、「完全に壊れている」とラベル付けされています。あなたが新しいバージョンに切り替わらない理由は何ですか? – sehe
私はGCCでインターナショナルのどこかにある簡単なマクロだと思います。デフォルトは "新しいアロケータ"ですが、GCCには "mallocアロケータ"やプールアロケータなどのいくつかの選択肢があります。 –
制限付きヒープを作成し、このライブラリの 'operator new'をオーバーロードすると、ライブラリ内のすべての' operator new'呼び出しが制限付きヒープに移動したとします。制限されたヒープがいっぱいで、オーバーロードされた '演算子new'が呼び出されたら、どんなふうに動作しますか?あなたは本当にそのような状況の下で 'operator new 'が失敗することを望みますか? 'operator new'が失敗しても、そのライブラリがまだ機能していない限り、私はあなたのことを信じません。おそらく、ライブラリがデータベースキャッシュなのか、そういうものなのか。ライブラリは何をしていますか? –