gpt4 book ai didi

memory - 为什么 valgrind 在 64 位架构上限制为 32 Gb?

转载 作者:IT王子 更新时间:2023-10-28 23:34:07 25 4
gpt4 key购买 nike

我正在尝试在一个使用超过 32 Gb 内存的进程上对一个 heisenbug 进行 valgrind,并达到了这个 valgrind 限制,这是可以通过重新编译 valgrind 来避免的任意问题还是很难?

最佳答案

限制是任意的,可以通过重新编译valgrind来改变。

Valgrind 使用 2 级稀疏数组跟踪内存。地址的 16 位用于索引包含指向二级映射的指针的 65536 条目表,该映射跟踪地址空间的范围(对于 32 位进程,通常 2¹⁶ 字节 = 64KB,对于 2¹⁹ 字节 = 512KB 64 位进程)。所以这个 2 级稀疏数组可以跟踪的内存总量是 65536 × 这个 block 大小。通过修改代码,这些 block 的大小可以增加到更大的 2 次方,代价是使用更多内存来跟踪大部分部分 block 。

this message在 valgrind-users 邮件列表中,Julian Seward 解释了如何将限制从 32GB 增加到 128GB:

  • in memcheck/mc_main.c change N_PRIMARY_BITS from 19 to 21

  • change the assertions at the end of memcheck/mc_main.c accordingly:

    • MAX_PRIMARY_ADDRESS → 4 * (existing value + 1) - 1
    • for the MASK(1/2/4/8) assertions, set to zero the rightmost two '1' bits in the block of leading 1 bits, eg MASK(8)0xFFFFFFE000000007ULL I think

  • in coregrind/m_aspacemgr/aspacemgr-linux.c change aspacem_maxAddr from (Addr)0x800000000 - 1 to (Addr)0x2000000000ULL - 1.


更新:Valgrind 可以使用的最大内存量在最近的版本中有所增加:

  • 在 Valgrind 3.9 之前为 32 GB
  • 64 GB 在 Valgrind 3.9 到 3.12 中
  • 128 GB 在 Valgrind 3.13 中

关于memory - 为什么 valgrind 在 64 位架构上限制为 32 Gb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8644234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com