8

GCC for Linux でコンパイルされた C プログラム内からの基本的な質問に答える必要があります。現在使用中のプロセス ヒープの量 (によって割り当てられているmalloc) と、空きヒープがブロックされている場合に存在する量です。標準ライブラリの GNU 実装にはmallinfo、必要なものを正確に報告する関数がありますが、32 ビット構成でのみ使用でき、AFAIK では、その機能に相当する 64 ビットはありません (ところで、誰もが理由を知っていますか?)。

LinuxでGCCを使用しているため、Linuxにはこれが必要です。ただし、ヒープはシステムに対して不透明であると想定しているため、この質問に答える唯一の方法は、標準ライブラリの実装によって提供される手段を使用することです。

Windows プラットフォームでの MSVC の実装には関数に相当するものはありませんmallinfoが、いわゆるヒープ ウォーク機能があり、ヒープ内のすべてのブロックを反復処理して必要な情報を計算できます。私の知る限り、GNU C ライブラリにはヒープ ウォーク インターフェイスはありません。(ある?)。

繰り返しになりますが、GCC で何をすればよいのでしょうか。効率的である必要はありません。つまり、前述のヒープ ウォーク ベースのアプローチは、私にとってはまったく問題なく機能します。GCC で使用中のヒープの量と空きの量を調べるにはどうすればよいですか? mallinfo.arenaを使用せずに現在のヒープ アリーナ サイズ (「参考文献」を参照)を判断する方法はわかりませんが、おそらく malloc-hooks をインストールしてサイズを「手動で」追跡することができますmallinfo

4

1 に答える 1

3

主要な glibc 開発者が関与する 2004 年のこのスレッドは、インターフェースがすでに「...実装にまったく適合しない」ことを示しています。、64 ビットのクリーン バージョンを作成する意味はほとんどないと見なされていました。(インターフェイスは glibc 用に設計されたものではありません - SUSmallinfo()に含めることを検討していました)。

情報を使って何をしようとしているのかによっては、malloc_stats()標準エラーで出力を生成するだけのを使用できるかもしれませmalloc()ん.賢明な結果を生み出す利点。

于 2010-05-10T07:34:24.930 に答える