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__);
}