Spec-Zone.ru › SQLite

Настройка предела размера кучи

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.

Пределы кучи не применяются в текущей реализации, если выполняется одно или несколько из следующих условий:

  • Значение предела установлено в ноль.
  • Учёт памяти отключён с помощью сочетания sqlite3_config(SQLITE_CONFIG_MEMSTATUS,...) опции времени запуска и SQLITE_DEFAULT_MEMSTATUS опции времени компиляции.
  • Определена альтернативная реализация кэша страниц с помощью sqlite3_config(SQLITE_CONFIG_PCACHE2,...).
  • Кэш страниц выделяет из своего собственного пула памяти, предоставленного sqlite3_config(SQLITE_CONFIG_PAGECACHE,...), а не из кучи.

Обстоятельства, при которых SQLite будет применять ограничения кучи, могут измениться в будущих версиях SQLite.

См. также списки Объектов, Констант и Функций.

SQLite is in the Public Domain.
https://sqlite.org/c3ref/hard_heap_limit64.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API