リンク先のアプリケーションからメモリ使用量を分離できるように、共有ライブラリを作成したいと考えています。つまり、共有ライブラリを と呼びましょう を呼び出す場合libmemory.so
、malloc
そのメモリを、アプリケーションで行われた への呼び出しを処理するために使用されるヒープとは別のヒープに維持したいと考えてmalloc
います。この質問は、メモリ アロケータの作成に関するものではなく、ライブラリとアプリケーションをリンクしてロードすることに関するものです。
これまでのところ、関数の挿入、シンボルの可視性、およびリンクのトリックの組み合わせを試してきました。これまでのところ、1 つの理由でこれを正しく理解できませんでした: 標準ライブラリです。アプリケーションと内部malloc
で発生する標準ライブラリの呼び出しを区別する方法が見つかりません。libmemory.so
これにより、内部で標準ライブラリを使用libmemory.so
するとアプリケーション ヒープが汚染されるため、問題が発生します。
malloc
私の現在の戦略は、共有ライブラリに の定義を隠しシンボルとして挿入することです。これはうまく機能し、実行時に動的にロードされる標準ライブラリを除いて、すべてのライブラリ コードが期待どおりに機能します。当然のことながら、標準ライブラリの使用法を静的に組み込み、コンパイル時に挿入malloc
された inを使用する方法を見つけようとしてきました。libmemory.so
私は試してみましたが-static-libgcc
成功し-static-libstdc++
ませんでした(とにかく、これは推奨されていないようです)。これは正しい答えですか?
どうする?
Ps、さらに読んでいただければ幸いです。質問のタグ付けに関するヘルプがあれば幸いです。