2011-12-27 86 views

回答

12

該限制是任意的,可以通過重新編譯valgrind來改變。

Valgrind使用2級稀疏數組跟蹤內存。地址的16位用於索引65536條目表,其中包含指向第二級映射的指針,該指針跟蹤地址空間的範圍(對於32位處理,通常2 16字節= 64KB,對於32字節= 512KB 64位進程)。所以這個2級稀疏數組可以跟蹤的內存總量是65536×這個塊大小。通過修改代碼,可以將這些塊的大小增加到2的較大冪,這是以使用更多內存來跟蹤大部分塊爲代價的。

this message在Valgrind的用戶郵件列表,朱利安·蘇厄德介紹瞭如何增加從32GB到128GB的限制:從19

  • memcheck/mc_main.c變化N_PRIMARY_BITS21

  • 變化在memcheck/mc_main.c結束處的斷言相應地:

    • MAX_PRIMARY_ADDRESS→4 *(現有值+1) - 1
    • MASK(1/2/4/8)斷言,設置爲零的最右邊的2 '1' 位在前導1個比特的塊,例如 MASK(8)0xFFFFFFE000000007ULL我認爲

  • coregrind/m_aspacemgr/aspacemgr-linux.c變化aspacem_maxAddr(Addr)0x800000000 - 1(Addr)0x2000000000ULL - 1


更新: 該Valgrind的可以在最新版本的使用已經增加的存儲器的最大量:

  • 32 GB之前Valgrind的3.9
  • 64 GB在Valgrind 3.9至3.12
  • 128 GB Valgrind 3.13
+0

很好的答案,謝謝 – piotr 2011-12-28 10:54:11

相關問題