免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2490 | 回复: 6
打印 上一主题 下一主题

正则库使用中发现内存占用过多问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-10 11:36 |只看该作者 |倒序浏览
使用linux系统自带的<regex.h>库,使用的正则表达式比较长,也比较多,进行正则匹配的URL个数上亿。
发现在程序运行时,很快内存到了400多M,并且缓慢增长,直到程序结束。
大家遇到过类似问题吗?请指教。

论坛徽章:
0
2 [报告]
发表于 2011-02-10 13:18 |只看该作者
regex.h 中text_regex_substr 和 text_regex_replace  动态分配的内存 你free了?

论坛徽章:
0
3 [报告]
发表于 2011-02-10 13:59 |只看该作者
regex.h 中text_regex_substr 和 text_regex_replace  动态分配的内存 你free了?
crazyshell 发表于 2011-02-10 13:18



    我使用的是这三个函数

  1. /* POSIX compatibility.  */
  2. extern int regcomp (regex_t *__restrict __preg,
  3.             const char *__restrict __pattern,
  4.             int __cflags);

  5. extern int regexec (const regex_t *__restrict __preg,
  6.             const char *__restrict __string, size_t __nmatch,
  7.             regmatch_t __pmatch[__restrict_arr],
  8.             int __eflags);

  9. extern void regfree (regex_t *__preg);
复制代码
最后执行的regfree。请问,text_regex_substr 和 text_regex_replace  是指?

论坛徽章:
0
4 [报告]
发表于 2011-02-10 15:30 |只看该作者
一个是取子串 一个是替换

论坛徽章:
0
5 [报告]
发表于 2011-02-10 15:35 |只看该作者
请问怎么解决这个问题?现在是先调用regcomp,然后执行上亿次regexec,最后调用regfree。系统只提供了这几个函数吧。

论坛徽章:
0
6 [报告]
发表于 2011-02-10 16:06 |只看该作者
我刚才测了一下,如果把正则表达式改成比较短的,没有内存问题。
现在的问题的正则非常长,是多个正则或在一起的,大家有没有好办法。

论坛徽章:
0
7 [报告]
发表于 2011-02-10 16:17 |只看该作者
我也没用过很长的正则 以前使用正则基本没你这种问题,一般就是内存没free掉 其它不清楚了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP