0

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 并且 close 和 free 不会释放此内存。

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

有任何想法吗?我很绝望!:(

4

1 回答 1

2

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

//print memory usage

您没有详细说明:-)。

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

例如,如果您只是简单地报告进程从操作系统分配了多少内存,那么在打开数据库时这可能会增加,但在关闭数据库时不会减少,因为它没有交还给操作系统。内存分配函数不倾向于将其交还,假设他们可能会再次需要它。

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

于 2013-09-10T08:31:49.830 回答