Small. Fast. Reliable.
Choose any three.

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将强制执行堆限制的情况可能会发生变化。

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