sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N); sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N);
这些接口限制了单个进程中所有数据库连接使用的堆内存量。
sqlite3_soft_heap_limit64() 接口设置和/或查询 SQLite 可能分配的堆内存的软限制。SQLite 努力将堆内存使用量保持在软堆限制以下,通过减少页面缓存中保存的页面数量来实现,因为堆内存使用量接近限制。软堆限制是“软限制”,因为尽管 SQLite 努力保持在限制以下,但它会超过限制而不是生成 SQLITE_NOMEM 错误。换句话说,软堆限制仅供参考。
sqlite3_hard_heap_limit64(N) 接口设置分配内存量的硬上限为 N 字节。sqlite3_hard_heap_limit64(N) 接口类似于 sqlite3_soft_heap_limit64(N),只是当达到硬堆限制时,内存分配将失败。
sqlite3_soft_heap_limit64() 和 sqlite3_hard_heap_limit64() 的返回值是在调用之前堆限制的大小,或者在发生错误的情况下为负数。如果参数 N 为负数,则不会更改堆限制。因此,可以通过调用 sqlite3_soft_heap_limit64(-1) 或 sqlite3_hard_heap_limit(-1) 来确定堆限制的当前大小。
将堆限制设置为零将禁用堆限制器机制。
软堆限制不能大于硬堆限制。如果启用了硬堆限制,并且如果 sqlite3_soft_heap_limit(N) 被调用,其值为 N 大于硬堆限制,则软堆限制将设置为硬堆限制的值。只要启用硬堆限制,软堆限制就会自动启用。当调用 sqlite3_hard_heap_limit64(N) 并且软堆限制超出 1..N 范围时,软堆限制将设置为 N。当启用硬堆限制时,调用 sqlite3_soft_heap_limit64(0) 使软堆限制等于硬堆限制。
也可以使用 PRAGMA soft_heap_limit 和 PRAGMA hard_heap_limit 调整内存分配限制。
如果以下一个或多个条件为真,则当前实现中不会强制执行堆限制
SQLite 强制执行堆限制的条件可能会在 SQLite 的未来版本中发生变化。