Unity 6.3
0 онлайн 95 гостей 3 в системе
Вход
Программирование в Unity Шаг 118 из 210

IUnityMemoryManager API ссылка

Эта страница предоставляет ссылку API для IUnityMemoryManager interface.

CreateAllocator

Объявление

UnityAllocator* (UNITY_INTERFACE_API * CreateAllocator)(const char* areaName, const char* objectName);

Параметры

Параметр Описание
константный символ* areaName Имя широкой категории для этого распределителя.
константный символ* objectName Имя для данного конкретного распределителя.

Описание

Создает новый объект Allocator, который может выделять блоки памяти.

DestroyAllocator

Объявление

void(UNITY_INTERFACE_API * DestroyAllocator)(UnityAllocator * allocator);

Параметры

Параметр Описание
UnityAllocator * распределитель Удаленный распределитель.

Описание

Удаляет существующий объект Allocator.

Ассигнования

Объявление

void* (UNITY_INTERFACE_API * Allocate)(UnityAllocator * allocator, size_t size, size_t align, const char* file, int32_t line);

Параметры

Параметр Описание
UnityAllocator * распределитель Распределитель, используемый для распределения.
размер_t размер Объем выделяемой памяти в байтах.
size_t расположение Выравнивание адреса памяти для полученного указателя.
константный файл char* Путь к исходному файлу, из которого поступил вызов для выполнения этого распределения. Используйте здесь предопределенный макрос FILE.
int32_t строка Номер строки в исходном файле, из которого поступил вызов для выполнения этого распределения. Используйте предопределенный макрос LINE.

Описание

Выделяет блок памяти с помощью существующего распределителя. Этот метод возвращает указатель на вновь выделенную память.

Перераспределить

Объявление

void(UNITY_INTERFACE_API * Deallocate)(UnityAllocator * allocator, void* ptr, const char* file, int32_t line);

Параметры

Параметр Описание
UnityAllocator * распределитель Распределитель, используемый для отмены выделения.
пустое* для Указатель на память, которая будет высвобождена.
константный файл char* Путь к исходному файлу, из которого поступил вызов для выполнения этого выделения. Используйте предопределенный макрос FILE здесь.
int32_t строка Номер строки в исходном файле, откуда поступил вызов для выполнения этого выделения. Используйте здесь предопределенный макрос LINE.

Описание

Перераспределяет память, на которую указывает указанный указатель. Это не устанавливает указатель на NULL.

Перераспределить

Объявление

void* (UNITY_INTERFACE_API * Reallocate)(UnityAllocator * allocator, void* ptr, size_t size, size_t align, const char* file, int32_t line);

Параметры

Параметр Описание
UnityAllocator * распределитель Распределитель, используемый для операции перераспределения.
пустое* для Указатель на память, которая будет высвобождена.
размер_t размер Объем выделяемой памяти в байтах.
size_t расположение Выравнивание адреса памяти для полученного указателя.
константный файл char* Путь к исходному файлу, из которого поступил вызов для выполнения этого перераспределения. Используйте здесь предопределенный макрос FILE.
int32_t строка Номер строки в исходном файле, из которого поступил вызов для выполнения этого перераспределения. Используйте предопределенный макрос LINE здесь.

Описание

Перераспределяет существующий указатель для указания на другой блок памяти.

Пример осуществления

Ниже приводится пример реализации IUnityMemoryManager interface.

#include "IUnityInterface.h"
#include "IUnityMemoryManager.h"
#include <cstdint>

static IUnityMemoryManager* s_MemoryManager = NULL;
static UnityAllocator* s_Alloc = NULL;

extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces * unityInterfaces)
{
    s_MemoryManager = unityInterfaces->Get<IUnityMemoryManager>();
    if (s_MemoryManager  == NULL)
    return;

    // Create an allocator. This allows you to see the allocation root in the profiler when taking snapshots. Under plug-ins-native - Plugin Backend Allocator
   // All memory allocated here also goes under kMemNativePlugin
    s_Alloc = s_MemoryManager->CreateAllocator("plug-ins-native", "Plugin Backend Allocator");
}

extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginUnload()
{
    //Free allocator
    s_MemoryManager->DestroyAllocator(s_Alloc);
    s_Alloc = NULL;
    s_MemoryManager = NULL;
}

void DoMemoryOperations()
{  
    // Allocate 1KB memory
    void* mem = s_MemoryManager->Allocate(s_Alloc, 1 * 1024, 16, __FILE__, __LINE__);
     // Reallocate the same pointer with 2KB
    mem = s_MemManager->Reallocate(s_Alloc, mem, 2 * 1024, 16, __FILE__, __LINE__);
    // Delete allocated memory
    s_MemoryManager->Deallocate(s_Alloc, mem, __FILE__, __LINE__);
}

Дополнительные ресурсы