首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在非常慢的应用程序中查找内存泄漏?

如何在非常慢的应用程序中查找内存泄漏?
EN

Stack Overflow用户
提问于 2012-10-01 11:54:52
回答 1查看 544关注 0票数 2

我有一个用C编写的程序,它使用Berkeley-Db、glib-2和libxml-2。它是一种具有句法和语义分析功能的NLP检索索引器,它将概念结构存储在检索索引中,而不是词。

然而,我遇到了一个问题--过了一天左右,我的程序内存耗尽了。

当我试图运行我的程序时,它的工作非常慢,在我看来,比正常运行慢10倍。

我所有的检查内存泄漏的尝试都没有显示出任何泄漏。

有谁知道在这种情况下可以帮助我的工具吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-01 12:39:33

我的解决办法是:

代码语言:javascript
复制
#define malloc(size) mymalloc(size, __FILE__, __FUNCTION__, __LINE__)
... (realloc, calloc, free)

void *mymalloc(size_t size, char *file, char *function, int line)
{
  void *data = malloc(size);
  addList(data, size, file, function, line);
  return data;
}

void myfree(void *data)
{
  removeList(data);
  free(data);
}

void debugalloc()
{
  printList();
}

removeList()将搜索全局列表中的“数据”并删除它,或者发出警告。使用“调试器()”,您应该打印整个列表(通常它应该是空的,或者充满了您希望它拥有的内容)。

另一个选项:您的内存管理变得支离破碎,.(几秒钟前,Alexey在评论部分写道。)

EDITH:XML

我对DOM和SAX发表了评论,我只想扩展一下这个评论:

代码语言:javascript
复制
<head><data>...</data><data>...</data>......<data>...</data></head>

是SAX的最佳人选。在DOM中,如果< data >本身具有不同大小的值,则整个XML将被读取并转换为内存,如果本身具有不同大小的值,则会很快导致内存碎片。可能发生的情况是,您的操作系统的内存modell将防止少量内存出现错误。

使用SAX,您只会将部分数据加载到内存中,并在消耗数据后立即将其处理掉。但是,您的实现必须从遍历文档更改为一种状态机,其中包含输入(< data >)和消费/处理(< / data >)。

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

https://stackoverflow.com/questions/12672770

复制
相关文章

相似问题

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