RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.

SQLite C Interface

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

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 использует нативные malloc() и free().

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

sqlite3_malloc64(N) обычно работает точно так же, как sqlite3_malloc(N), но N это unsigned 64-bit integer вместо signed 32-bit integer.

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

sqlite3_realloc(X,N) пытается изменить размеры предшествующего выделения памяти X, чтобы быть по крайней мере N байтами. Если X параметр для sqlite3_realloc(X,N) = NULL, его поведение идентично sqlite3_malloc(N). Если N для sqlite3_realloc(X,N) = 0 или отрицателен, поведение точно то же самое, как у 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-bit unsigned integer вместо 32-bit signed integer.

Если X это выделение памяти, ранее полученное из sqlite3_malloc(), sqlite3_malloc64(), sqlite3_realloc() или sqlite3_realloc64(), sqlite3_msize(X) вернет размер того выделения памяти в байтах. Значение, возвращенное sqlite3_msize(X), могло бы быть больше, чем заказанное число байтов, когда X был ассигнован. Если X = NULL, то sqlite3_msize(X) вернет 0. Если 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().