mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-21 09:00:59 +03:00
Add the sqlite3_hard_heap_limit64() interface and the corresponding
"PRAGMA hard_heap_limit=N" command. FossilOrigin-Name: b0ccef61a7f92d20228becbf4f997bf0f4e46dad2deaf0896dc63b976ad1dd11
This commit is contained in:
@@ -6038,6 +6038,9 @@ int sqlite3_db_release_memory(sqlite3*);
|
||||
/*
|
||||
** CAPI3REF: Impose A Limit On Heap Size
|
||||
**
|
||||
** These interfaces impose limits on the amount of heap memory that will be
|
||||
** by all database connections within a single process.
|
||||
**
|
||||
** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the
|
||||
** soft limit on the amount of heap memory that may be allocated by SQLite.
|
||||
** ^SQLite strives to keep heap memory utilization below the soft heap
|
||||
@@ -6048,20 +6051,41 @@ int sqlite3_db_release_memory(sqlite3*);
|
||||
** an [SQLITE_NOMEM] error. In other words, the soft heap limit
|
||||
** is advisory only.
|
||||
**
|
||||
** ^The return value from sqlite3_soft_heap_limit64() is the size of
|
||||
** the soft heap limit prior to the call, or negative in the case of an
|
||||
** ^The sqlite3_hard_heap_limit64(N) interface sets a hard upper bound of
|
||||
** N bytes on the amount of memory that will be allocated. ^The
|
||||
** sqlite3_hard_heap_limit64(N) interface is similar to
|
||||
** sqlite3_soft_heap_limit64(N) except that memory allocations will fail
|
||||
** when the hard heap limit is reached.
|
||||
**
|
||||
** ^The return value from both sqlite3_soft_heap_limit64() and
|
||||
** sqlite3_hard_heap_limit64() is the size of
|
||||
** the heap limit prior to the call, or negative in the case of an
|
||||
** error. ^If the argument N is negative
|
||||
** then no change is made to the soft heap limit. Hence, the current
|
||||
** size of the soft heap limit can be determined by invoking
|
||||
** sqlite3_soft_heap_limit64() with a negative argument.
|
||||
** then no change is made to the heap limit. Hence, the current
|
||||
** size of heap limits can be determined by invoking
|
||||
** sqlite3_soft_heap_limit64(-1) or sqlite3_hard_heap_limit(-1).
|
||||
**
|
||||
** ^If the argument N is zero then the soft heap limit is disabled.
|
||||
** ^Setting the heap limits to zero disables the heap limiter mechanism.
|
||||
**
|
||||
** ^(The soft heap limit is not enforced in the current implementation
|
||||
** ^The soft heap limit may not be greater than the hard heap limit.
|
||||
** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
|
||||
** is invoked with a value of N that is greater than the hard heap limit,
|
||||
** the the soft heap limit is set to the value of the hard heap limit.
|
||||
** ^The soft heap limit is automatically enabled whenever the hard heap
|
||||
** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and
|
||||
** the soft heap limit is outside the range of 1..N, then the soft heap
|
||||
** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the
|
||||
** hard heap limit is enabled makes the soft heap limit equal to the
|
||||
** hard heap limit.
|
||||
**
|
||||
** The soft heap limits can also be adjusted using
|
||||
** [PRAGMA soft_heap_limit] and [PRAGMA hard_heap_limit].
|
||||
**
|
||||
** ^(The heap limits are not enforced in the current implementation
|
||||
** if one or more of following conditions are true:
|
||||
**
|
||||
** <ul>
|
||||
** <li> The soft heap limit is set to zero.
|
||||
** <li> The limit value is set to zero.
|
||||
** <li> Memory accounting is disabled using a combination of the
|
||||
** [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and
|
||||
** the [SQLITE_DEFAULT_MEMSTATUS] compile-time option.
|
||||
@@ -6072,21 +6096,11 @@ int sqlite3_db_release_memory(sqlite3*);
|
||||
** from the heap.
|
||||
** </ul>)^
|
||||
**
|
||||
** Beginning with SQLite [version 3.7.3] ([dateof:3.7.3]),
|
||||
** the soft heap limit is enforced
|
||||
** regardless of whether or not the [SQLITE_ENABLE_MEMORY_MANAGEMENT]
|
||||
** compile-time option is invoked. With [SQLITE_ENABLE_MEMORY_MANAGEMENT],
|
||||
** the soft heap limit is enforced on every memory allocation. Without
|
||||
** [SQLITE_ENABLE_MEMORY_MANAGEMENT], the soft heap limit is only enforced
|
||||
** when memory is allocated by the page cache. Testing suggests that because
|
||||
** the page cache is the predominate memory user in SQLite, most
|
||||
** applications will achieve adequate soft heap limit enforcement without
|
||||
** the use of [SQLITE_ENABLE_MEMORY_MANAGEMENT].
|
||||
**
|
||||
** The circumstances under which SQLite will enforce the soft heap limit may
|
||||
** The circumstances under which SQLite will enforce the heap limits may
|
||||
** changes in future releases of SQLite.
|
||||
*/
|
||||
sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
|
||||
sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N);
|
||||
|
||||
/*
|
||||
** CAPI3REF: Deprecated Soft Heap Limit Interface
|
||||
|
||||
Reference in New Issue
Block a user