我有一个非常独特的问题,我在一个特殊的硬件上运行 Linux,这是一个基于 Octeon 的硬件。我看到我的进程在执行特定操作时不断分配内存。我想跟踪代码的哪一部分正在进行此调用。
这是有关我的环境的详细信息
- Octeon MIPS 架构 32 位。
- Linux 内核 2.6
- 最小的 linux 实现。
但是,这是我需要解决的选项/限制。
- 不确定创建我自己的 malloc 是否会有所帮助。如果这是可能的,有人可以解释一下吗?
- 无法使用 walgrind 等工具,不适用于此架构。
- 代码库很大,不完全理解,因此审查不可行和快速。
- strace 给了我分配的内存地址,但是我怎样才能找出创建这个的代码呢?
请建议是否有办法解决这个问题。
非常感谢。
我忘了提到的另一件事,该进程的虚拟内存继续增加到 1.4GB,在此之后它停止并且我看到代码中的分配因 ENOMEM 而失败。这个 1.4 GB 的限制与 32 位机器有关吗?AFAIU 32 位机器应该允许每个进程 3 GB 的虚拟内存不是吗?此外,没有每个进程的限制,我已经用 setrlimit/getrlimit 确认了这一点。
干杯,帕万