如何检测24/7全天候应用程序中的内存溢出?系统和工具为linux + gcc。
有时内存溢出的原因是将内存写入数组之外;有时内存溢出的原因是无效的指针。
那么,有没有人对此有一定的经验,知道如何预防呢?
发布于 2011-11-29 18:38:49
预防(在代码级别):
检测(在运行时):
发布于 2011-11-29 18:36:20
您重新定义了内存分配函数(例如malloc),以分配比存储分配所需的更大的缓冲区,并使用已知模式填充额外的空间,并定期检查该模式是否已损坏。
发布于 2011-11-29 18:54:17
正如其他人所说,在测试过程中使用valgrind,并进行详尽的测试。对于运行时的保护,可以替换全局operator new和operator delete:替换应该在返回的块的两侧维护一个保护块:operator new将保护块初始化为预定义的模式,operator delete验证该模式是否仍然存在。operator delete还应使用独特的模式( all 0's)覆盖实际内存,以增加检测到使用悬空指针的概率。
对于阵列,使用std::vector,尤其是std::vector的调试版,应该可以防止所有覆盖,并在发生覆盖的站点立即检测到覆盖(而不是在您最终释放内存时)。然而,性能影响可能太大了,不能把所有的检查都留在最终的应用程序中(但这值得一试)。
https://stackoverflow.com/questions/8309308
复制相似问题