2011-12-27 15 views

答えて

12

制限は任意で、valgrindを再コンパイルすることで変更できます。

Valgrindは、2レベルの希薄配列を使用してメモリを追跡します。アドレスの16ビットは、アドレス空間の範囲を追跡する第2レベルのマップへのポインタを含む65536エントリテーブルへのインデックス付けに使用されます(通常、32ビットプロセスの場合は2 16バイト= 64KB、32ビットプロセスの場合は64KB、 64ビットプロセス)。したがって、この2レベルのスパース配列によってトラッキングできるメモリの総量は、このチャンクサイズの65536倍です。コードを変更することで、これらのチャンクのサイズを2の大きな累乗に増やすことができます。これは、大部分のチャンクを追跡するために多くのメモリを使用するという代償です。

メーリングリストvalgrindのユーザーに this message

、ジュリアン・スワードは、32ギガバイトから128ギガバイトに上限を増やす方法について説明します:19からmemcheck/mc_main.c変更N_PRIMARY_BITS

  • 21

  • 変更memcheck/mc_main.cの最後のアサーション:

    • MAX_PRIMARY_ADDRESS→4 *(既存の値+ 1) - リーディング1ビットのブロックにおける右端2 '1' のビットをゼロに設定MASK(1/2/4/8)アサーション、1
    • 、例えば MASK(8)0xFFFFFFE000000007ULL Iは
      思います
  • (Addr)0x2000000000ULL - 1(Addr)0x800000000 - 1からの変更aspacem_maxAddrcoregrind/m_aspacemgr/aspacemgr-linux.cインチ


更新:前Valgrindの3.9

  • 64ギガバイトにまで

    • 32ギガバイト: Valgrindのに使用できるメモリの最大量は、最近のバージョンでは増加していますValgrind 3.9から3.12
    • Valgrindで128 GB 3.13
  • +0

    偉大な答え、ありがとう – piotr

    関連する問題