小智 22
valgrind源代码中的第1327行指向用户手册,"请参阅用户手册中的限制"部分:
在Linux上,Valgrind使用RLIMIT_DATA rlim_cur在启动时确定'brk段'的大小,最小值为1 MB,最大值为8 MB.每当程序试图将brk段扩展到超出启动时确定的大小时,Valgrind就会输出一条消息.大多数程序都可以正常使用此限制,通常是通过切换到使用mmap来获取更多内存.如果您的程序确实需要大型brk段,则必须更改8 MB硬编码限制并重新编译Valgrind.
Valgrind只为brk段分配8MB,用完了.有人报告说,libc然后在讨论这个问题的valgrind bugreport中切换到基于mmap的内存分配.
虽然这不是一个真正的答案,但它仍然满足OP的"找不到任何文档"的要求:
1)http://repo.or.cz/valgrind.git/blob/HEAD:/coregrind/m_syswrap/syswrap-generic.c
包含第1322行讨论的消息
2)http://sourceforge.net/p/valgrind/mailman/message/34068401/
是引入该功能的提交,以及相应的提交消息读取
Author: florian
Date: Wed Apr 29 13:59:16 2015
New Revision: 15155
Log: Issue an error message if then brk segment overflows.
Run Code Online (Sandbox Code Playgroud)
从那里我们可以进一步将这个问题转发给那些能够给出一个合格的答案的人,"brk段溢出"到底是什么意思"在这种情况下意味着"!
小智 5
添加到 Piwi 的答案中,有时您的程序将要求 Callgrind 使用更大的 brk 段(最多 GB,具体取决于您的实现)。
要修改硬编码限制,请转到(第 1000 行左右)中的函数VG_(ii_create_image),coregrind/m_initimg/initimg-linux.c根据需要更改以下几行
SizeT m1 = 1024 * 1024;
SizeT m8 = 8 * m1;
Run Code Online (Sandbox Code Playgroud)
并重建valgrind。
m8 是 callgrind 将尝试分配的最大 brk 段大小
| 归档时间: |
|
| 查看次数: |
15815 次 |
| 最近记录: |