首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测内存溢出?

如何检测内存溢出?
EN

Stack Overflow用户
提问于 2011-11-29 18:34:21
回答 4查看 4.5K关注 0票数 2

如何检测24/7全天候应用程序中的内存溢出?系统和工具为linux + gcc。

有时内存溢出的原因是将内存写入数组之外;有时内存溢出的原因是无效的指针。

那么,有没有人对此有一定的经验,知道如何预防呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-29 18:38:49

预防(在代码级别):

  • 注意编译器的警告
  • 使用静态代码检查器
  • 使用强编码指南

检测(在运行时):

  • 使用valgrindefence等工具...要分析程序的行为,请使用
票数 5
EN

Stack Overflow用户

发布于 2011-11-29 18:36:20

您重新定义了内存分配函数(例如malloc),以分配比存储分配所需的更大的缓冲区,并使用已知模式填充额外的空间,并定期检查该模式是否已损坏。

票数 2
EN

Stack Overflow用户

发布于 2011-11-29 18:54:17

正如其他人所说,在测试过程中使用valgrind,并进行详尽的测试。对于运行时的保护,可以替换全局operator newoperator delete:替换应该在返回的块的两侧维护一个保护块:operator new将保护块初始化为预定义的模式,operator delete验证该模式是否仍然存在。operator delete还应使用独特的模式( all 0's)覆盖实际内存,以增加检测到使用悬空指针的概率。

对于阵列,使用std::vector,尤其是std::vector的调试版,应该可以防止所有覆盖,并在发生覆盖的站点立即检测到覆盖(而不是在您最终释放内存时)。然而,性能影响可能太大了,不能把所有的检查都留在最终的应用程序中(但这值得一试)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8309308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档