Spec-Zone.ru › SQLite

Подсистема распределения памяти

void *sqlite3_malloc(int);
void *sqlite3_malloc64(sqlite3_uint64);
void *sqlite3_realloc(void*, int);
void *sqlite3_realloc64(void*, sqlite3_uint64);
void sqlite3_free(void*);
sqlite3_uint64 sqlite3_msize(void*);

Ядро SQLite использует эти три функции для всех своих внутренних потребностей в распределении памяти. «Ядро» в предыдущем предложении не включает реализацию VFS, специфичную для операционной системы. Windows VFS использует native malloc() и free() для некоторых операций.

Функция sqlite3_malloc() возвращает указатель на блок памяти размером не менее N байт, где N — параметр. Если sqlite3_malloc() не может получить достаточное количество свободной памяти, она возвращает указатель NULL. Если параметр N функции sqlite3_malloc() равен нулю или отрицательному значению, то sqlite3_malloc() возвращает указатель NULL.

Функция sqlite3_malloc64(N) работает так же, как sqlite3_malloc(N), за исключением того, что N — это целое 64-битное беззнаковое число вместо знакового 32-битного целого числа.

Вызов sqlite3_free() с указателем, ранее возвращённым функциями sqlite3_malloc() или sqlite3_realloc(), освобождает эту память, чтобы она могла быть повторно использована. Функция sqlite3_free() является пустой операцией (no-op), если ей передаётся указатель NULL. Передача указателя NULL в sqlite3_free() безопасна. После освобождения память не должна ни читаться, ни записываться. Даже чтение ранее освобождённой памяти может привести к ошибке сегментации или другой серьёзной ошибке. Повреждение памяти, ошибка сегментации или другие серьёзные ошибки могут возникнуть, если функция sqlite3_free() вызывается с ненулевым указателем, который не был получен из sqlite3_malloc() или sqlite3_realloc().

Интерфейс sqlite3_realloc(X,N) пытается изменить размер предыдущего выделения памяти X на не менее N байт. Если параметр X в sqlite3_realloc(X,N) равен указателю NULL, то его поведение идентично вызову sqlite3_malloc(N). Если параметр N в sqlite3_realloc(X,N) равен нулю или отрицательному значению, то поведение точно такое же, как при вызове sqlite3_free(X). sqlite3_realloc(X,N) возвращает указатель на выделение памяти размером не менее N байт или NULL, если памяти недостаточно. Если M — размер предыдущего выделения, то min(N,M) байт предыдущего выделения копируются в начало буфера, возвращаемого sqlite3_realloc(X,N), а предыдущее выделение освобождается. Если sqlite3_realloc(X,N) возвращает NULL, а N положительно, то предыдущее выделение не освобождается.

Интерфейс sqlite3_realloc64(X,N) работает так же, как sqlite3_realloc(X,N), за исключением того, что N — это 64-битное беззнаковое целое число вместо 32-битного знакового целого числа.

Если X — выделение памяти, ранее полученное из sqlite3_malloc(), sqlite3_malloc64(), sqlite3_realloc() или sqlite3_realloc64(), то sqlite3_msize(X) возвращает размер этого выделения памяти в байтах. Возвращаемое значение sqlite3_msize(X) может быть больше, чем количество байт, запрошенных при выделении X. Если X — указатель NULL, то sqlite3_msize(X) возвращает ноль. Если X указывает не на начало выделения памяти, или если он указывает на ранее валидное выделение памяти, которое теперь освобождено, то поведение sqlite3_msize(X) не определено и потенциально опасно.

Память, возвращённая функциями sqlite3_malloc(), sqlite3_realloc(), sqlite3_malloc64() и sqlite3_realloc64(), всегда выравнивается по крайней мере до 8-байтовой границы или до 4-байтовой границы, если используется опция компиляции SQLITE_4_BYTE_ALIGNED_MALLOC.

Аргументы-указатели функций sqlite3_free() и sqlite3_realloc() должны быть либо NULL, либо указателями, полученными от предыдущего вызова sqlite3_malloc() или sqlite3_realloc(), которые ещё не были освобождены.

Приложение не должно читать или записывать какую-либо часть блока памяти после его освобождения с помощью sqlite3_free() или sqlite3_realloc().

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

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

Spec-Zone.ru

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