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.