我有一个非常独特的问题,我在一台基于Octeon的特殊硬件上运行Linux。我发现我的进程在执行特定操作时不断分配内存。我想追踪哪部分代码正在进行此调用。
以下是有关我的环境的详细信息:
还有一件事我忘了提,在达到1.4GB时,该进程的虚拟内存不断增加,然后停止,并且我看到代码中的分配失败并显示ENOMEM。这个1.4 GB的限制与32位机器有关吗?据我所知,32位机器每个进程应允许3 GB的虚拟内存,不是吗?另外,没有每个进程限制,我已经通过setrlimit/getrlimit确认了这一点。
谢谢。 Pavan
以下是有关我的环境的详细信息:
- Octeon MIPS架构32位。
- Linux内核2.6
- 最小化的Linux实现。
- 不确定是否创建自己的malloc会有所帮助。如果可能的话,有人能解释一下吗?
- 无法使用像walgrind这样的工具,因为它不适用于此体系结构。
- 代码库很大,我不太理解它,因此不能快速进行审核。
- strace给出了已分配的内存地址,但我如何从中找出创建这个内存的代码?
还有一件事我忘了提,在达到1.4GB时,该进程的虚拟内存不断增加,然后停止,并且我看到代码中的分配失败并显示ENOMEM。这个1.4 GB的限制与32位机器有关吗?据我所知,32位机器每个进程应允许3 GB的虚拟内存,不是吗?另外,没有每个进程限制,我已经通过setrlimit/getrlimit确认了这一点。
谢谢。 Pavan