BerkeleyDB删除数据时的“内存泄漏”问题
之前用了Berkeleydb的DB_THREAD标记,于是bdb的增删查都内部带锁,但最近发现有内存泄漏的嫌疑——即使只调用bdb的del,用
free看系统剩下的内存也会越来越少,后来才发现问题:原来一旦用了DB_THREAD标记,在
db->get,db->put,db->del
时操作的DBT必须带上DB_DBT_USERMEM或DB_DBT_MALLOC,以告知bdb是用户程序来分配内存还是bdb自己来分配内存给DBT
key和DBT value。
即使是del操作,也必须写清楚这个flag:
char buff[64];
// buff中是要删除的key
....
DBT tKey;
memset(&tKey,0,sizeof(DBT));
tKey.flags = DB_DBT_USERMEM;
tKey.data = buff;
tKey.size = strlen(buff);
int res = m_dbp->del(m_dbp,NULL,&tKey,0);
这样就没有所谓的“内存泄漏”了。
即使是del操作,也必须写清楚这个flag:
char buff[64];
// buff中是要删除的key
....
DBT tKey;
memset(&tKey,0,sizeof(DBT));
tKey.flags = DB_DBT_USERMEM;
tKey.data = buff;
tKey.size = strlen(buff);
int res = m_dbp->del(m_dbp,NULL,&tKey,0);
这样就没有所谓的“内存泄漏”了。
相关文章
- fedora 9 小集 - 01 05, 2009
- 多线程调试 - 12 17, 2008
- 多线程调试 - 12 17, 2008
留言: