SQLite C 接口

对堆大小施加限制

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) 来确定。

将堆限制设置为零会禁用堆限制器机制。

软堆限制不能大于硬堆限制。如果启用了硬堆限制,并且如果使用大于硬堆限制的 N 值调用 sqlite3_soft_heap_limit(N),则软堆限制将设置为硬堆限制的值。只要启用硬堆限制,就会自动启用软堆限制。当调用sqlite3_hard_heap_limit64(N)时,软堆限制在1..N的范围之外,则软堆限制设置为N。启用硬堆限制时调用sqlite3_soft_heap_limit64(0)使软堆限制等于到硬堆限制。

还可以使用 PRAGMA soft_heap_limitPRAGMA hard_heap_limit调整内存分配限制。

如果满足以下一个或多个条件,则当前实现中不会强制执行堆限制:

SQLite 将强制执行堆限制的情况可能会在 SQLite 的未来版本中发生变化。

另请参阅 对象常量函数的列表。