2011-12-27 83 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

相关问题