KasperskyOS Community Edition 1.3

Выделение и освобождение памяти (alloc.h)

API определен в заголовочном файле sysroot-*-kos/include/kos/alloc.h из состава KasperskyOS SDK.

API предназначен для выделения и освобождения памяти. Выделенная память представляет собой зафиксированный регион виртуальной памяти, к которому разрешен доступ на чтение и запись.

Сведения о функциях API приведены в таблице ниже.

Функции alloc.h

Функция

Сведения о функции

KosMemAllocEx()

Назначение

Выделяет память.

Параметры

  • [in] size – размер выделяемой памяти в байтах. Если указать нулевой размер, функция возвращает указатель, который можно передать функции KosMemFree().
  • [in] align – значение, задающее выравнивание выделяемой памяти. Должно быть степенью двойки. Адрес выделяемой памяти может быть невыровненным (align=1) или выровненным (align=2,4,...,2^N) на границу 2^N-байтовой последовательности (например, двухбайтовой, четырехбайтовой).
  • [in] zeroed – значение, задающее инициализацию выделяемой памяти (1 – инициализировать нулями, 0 – не инициализировать).

Возвращаемые значения

В случае успеха возвращает указатель на выделенную память, иначе возвращает RTL_NULL.

KosMemAlloc()

Назначение

Выделяет память.

Параметры

  • [in] size – размер выделяемой памяти в байтах. Если указать нулевой размер, функция возвращает указатель, который можно передать функции KosMemFree().

Возвращаемые значения

В случае успеха возвращает указатель на выделенную памяти, иначе возвращает RTL_NULL.

KosMemZalloc()

Назначение

Выделяет память и инициализирует ее нулями.

Параметры

  • [in] size – размер выделяемой памяти в байтах. Если указать нулевой размер, функция возвращает указатель, который можно передать функции KosMemFree().

Возвращаемые значения

В случае успеха возвращает указатель на выделенную память, иначе возвращает RTL_NULL.

KosMemFree()

Назначение

Освобождает память.

Параметры

  • [in] ptr – указатель на освобождаемую память. Если указать RTL_NULL, функция не выполняет никаких действий.

Возвращаемые значения

Нет.

KosMemRealloc()

Назначение

Выделяет память и опционально копирует во вновь выделенную память содержимое ранее выделенной памяти, освобождая после копирования ранее выделенную память.

Параметры

  • [in,optional] ptr – указатель на ранее выделенную память или RTL_NULL, если требуется только выделить память без копирования содержимого ранее выделенной памяти.
  • [in] size – размер вновь выделяемой памяти в байтах. Содержимое ранее выделенной памяти копируется во вновь выделенную память в том объеме, который вмещается во вновь выделенную память. Если указать нулевой размер, функция возвращает указатель, который можно передать функции KosMemFree().

Возвращаемые значения

В случае успеха возвращает указатель на выделенную память, иначе возвращает RTL_NULL.

KosMemReallocEx()

Назначение

Выделяет память и опционально копирует во вновь выделенную память содержимое ранее выделенной памяти, освобождая после копирования ранее выделенную память.

Параметры

  • [in,optional] ptr – указатель на ранее выделенную память или RTL_NULL, если требуется только выделить память без копирования содержимого ранее выделенной памяти.
  • [in] size – размер вновь выделяемой памяти в байтах. Содержимое ранее выделенной памяти копируется во вновь выделенную память в том объеме, который вмещается во вновь выделенную память. Если указать нулевой размер, функция возвращает указатель, который можно передать функции KosMemFree().
  • [in] zeroed – значение, задающее инициализацию выделяемой памяти (1 – инициализировать нулями, 0 – не инициализировать). Если через параметр ptr передать RTL_NULL, а в параметре zeroed указать 1, то выделенная память будет инициализирована нулями. Если размер вновь выделенной памяти меньше или равен размеру ранее выделенной памяти, то значение параметра zeroed не влияет на содержимое вновь выделенной памяти. Если размер вновь выделенной памяти больше размера ранее выделенной памяти, и в параметре zeroed указано значение 1, то фрагмент вновь выделенной памяти, который не занят скопированным содержимым из ранее выделенной памяти, может быть инициализирован нулями. Чтобы этот фрагмент гарантированно был инициализирован нулями, нужно выполнить следующее. Изначально память нужно выделить функцией KosMemZalloc(), функцией KosMemAllocEx() со значением 1 в параметре zeroed или функцией KosMemReallocEx() со значением 1 в параметре zeroed и значением RTL_NULL в параметре ptr. Все последующие вызовы KosMemReallocEx() нужно выполнять со значением 1 в параметре zeroed.

Возвращаемые значения

В случае успеха возвращает указатель на выделенную память, иначе возвращает RTL_NULL.