我的 C 应用程序中遇到了非常智能的内存损坏问题。
高负载时会发生损坏。
所以我尝试了 purify、valgrind、mprotected,还尝试编写自己的简单保护机制。
Purify/Valgrind - 没有帮助,因为它降低了我的应用程序的性能并且问题没有重现。
mprotected 用法只是将损坏移动到其他内存位置。 (因为它需要将内存与页面大小对齐)。
我的简单保护机制不起作用,因为它还会降低性能。
如何在不降低性能的情况下调试我的应用程序?
最佳答案
如果您有 64 位,您可以使用始终执行 mmap()
的自定义 malloc()
和始终执行 mmap()
的自定义 free()
在同一内存上执行 munmap()
和另一个 mmap()
。用互斥量保护这些东西以避免致命的竞争条件。这会将首次访问已释放内存时的行为更改为故障。
如果没有找到,调整自定义的malloc()
,将分配的缓冲区移动到映射区域中尽可能高的位置。
请注意,您不能在 32 位中执行此操作,因为这会疯狂地消耗地址空间。
关于c - 如何在 Linux 上调试内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19448412/