我试图valgrind一个使用超过32 Gb的内存并触及此valgrind限制的进程的heisenbug,这是一个可以通过重新编译valgrind避免的任意一个,或者它是一个很难的吗?为什么valgrind在64位架构上仅限于32 Gb?
9
A
回答
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_BITS
到21
变化在
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
相关问题
- 1. 上32位和64位架构寻址
- 2. 在64位OSX上构建32位libcurl
- 3. 什么类型的内存在32位Windows上有2 GB限制?
- 4. 为32位和64位构建文件
- 5. 在64位CentOS上为ARM构建32位二进制文件
- 6. Microsoft建议在64位计算机上安装32位IIS 7 AppPools。为什么?
- 7. 为什么__sync_add_and_fetch适用于32位系统上的64位变量?
- 8. .NET在32位或64位系统上有什么区别?
- 9. 在scons中检测CPU架构(32位/ 64位)
- 10. 什么是适合32位和64位“32位”的术语
- 11. 需要帮助在Windows上构建Skia(仅限32位)
- 12. 为什么依赖walker将32位dll显示为64位?
- 13. 从32位变为64位
- 14. 在32位架构上安装RethinkDB
- 15. 当32位Linux在64位英特尔架构上运行时,使用什么类型的寻呼?
- 16. 用于32位python(3.6)的32位pyodbc适用于Microsoft的64位odbc驱动程序。为什么?
- 17. 为什么我的PowerShell主机在64位机器上以32位运行?
- 18. 为什么在64位FreeBSD v8.1上运行32位可以执行ELF错误?
- 19. 为什么32位驱动程序不能在64位上工作
- 20. 为什么在64位Ubuntu上不安装32位.deb软件包?
- 21. 在64位机器上限制芯片32位
- 22. VS上的UINT64左移(64> shift> 32)位仅移位32位
- 23. 在SharePoint 2007上的64位webpart 32位
- 24. 在64位Linux上编译32位libGLEW.so
- 25. 在32位或64位matlab上运行?
- 26. 在64位DMD上编译32位
- 27. 为什么64位MSBuild加载32位扩展?
- 28. 为什么32位和64位numpy/pandas之间有区别
- 29. 为什么使用IIS7.5的Microsoft.Web.Management.dll仅适用于64位进程?
- 30. 使用64位构建32位llvm-gcc
很好的答案,谢谢 – piotr 2011-12-28 10:54:11