sqlite.h


Imponer un límite al tamaño del montón

sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);

La funnción sqlite3_soft_heap_limit64() asigna y/o consulta el límite suave de la cantidad de memoria del montón que puede ser reservada por SQLite. SQLite se esfuerza por mantener la utilización de la memoria del montón por debajo de ese límite reduciendo el número de páginas en la caché de páginas para que el uso de la memoria se aproxime al límite. El límite suave del montón es "suave" porque a pesar de que SQLite se esfuerza por mantenerse por debajo de él, ese límite se excederá en lugar de generar un error SQLITE_NOMEM. En otras palabras, el límite suave del montón es meramente una recomendación.

El valor de retorno de sqlite3_soft_heap_limit64() es el tamaño del límite suave del montón anterior a la llamada. So el argumento N es negativo no se hacen cambios en el límite. Por lo tanto, el tamaño actual del límite blando del montón puede ser determinado invocando a sqlite3_soft_heap_limit64() con un argumento negativo.

Si el argumento N es cero el límite blando del montón se desactiva.

El límite no se aplica a la implementación actual si una o más de las condiciones siguientes es verdadera:

  • El límite suave se asigna a cero.
  • La contabilidad de memoria está deshabilitada usando una combinación de la opción de arranque sqlite3_config(SQLITE_CONFIG_MEMSTATUS,...) y la opción de compilación SQLITE_DEFAULT_MEMSTATUS.
  • Una implementación alternativa de caché de páginas usando sqlite3_config(SQLITE_CONFIG_PCACHE,...).
  • La caché de páginas asigna desde su propia memoria suministrada por sqlite3_config(SQLITE_CONFIG_PAGECACHE,...) en lugar de desde el montón.

A partir de la versión 3.7.3 de SQLite, el límite suave del montón se aplica independientemente de si se usa o no la opción de compilación SQLITE_ENABLE_MEMORY_MANAGEMENT. Con SQLITE_ENABLE_MEMORY_MANAGEMENT, el límite suave se aplica en todas las peticiones de memoria. Sin SQLITE_ENABLE_MEMORY_MANAGEMENT, el límite sólo se aplica por el caché de páginas. Las pruebas sugieren que ya que el caché de páginas es la memoria de usario predominante, la mayor parte de las aplicaciones conseguirán un cumplimiento adecuado del límite suave del montón sin usar SQLITE_ENABLE_MEMORY_MANAGEMENT.

Las circunstancias en las que SQLite hará cumplir el límite suave del montón podrán cambiar en futuras versiones de SQLite.