sqlite3_open分配sqlite3_close未释放的内存

时间:2013-09-10 08:29:04

标签: ios memory-leaks sqlite

sqlite3_open分配sqlite3_close未发布的内存 我有以下代码:

sqlite3* db = nil;    
const char* path = "...\myDb.sqlitedb";
//print memory usage
int error = sqlite3_open(path,&db);
//print memory usage
sqlite3_close(db);
//print memory usage
free(db);
//print memory usage

根据内存使用情况的打印 - 我看到open分配了50KB左右 并且关闭和免费不释放这个记忆。

任何人都知道为什么?我该如何释放这段记忆?我在我的应用程序中使用了很多sql查询 - 我无法承受这种泄漏...... 整个函数被自动释放池块包围 - 所以我不认为这是导致问题的原因。

有什么想法吗? 我绝望了! :(

1 个答案:

答案 0 :(得分:2)

这完全取决于这条线的运作方式:

//print memory usage

你没有详细说明: - )。

你很可能错误地报告了内存使用情况。

例如,如果您只是报告进程从操作系统分配了多少内存,那么在打开数据库时可能会增加,但在关闭数据库时可能不会减少,因为它不会返回到操作系统。内存分配功能不会反过来,假设他们可能会再次需要它。

在任何情况下,您的泄漏(即使它存在)并不严重,除非您打开和关闭数据库很多,您可能希望避免这种情况,因为它也会对性能产生影响。如果可以,您应该打开数据库一次,使用它,然后关闭一次。这是理想的用例。