此页面提供 IUnityMemoryManager
接口的 API 参考。
UnityAllocator* (UNITY_INTERFACE_API * CreateAllocator)(const char* areaName, const char* objectName);
参数 | 描述 |
---|---|
const char* areaName | 此分配器的广泛类别的名称。 |
const char* objectName | 此特定分配器的名称。 |
创建一个新的 Allocator 对象,它可以分配内存块。
void(UNITY_INTERFACE_API * DestroyAllocator)(UnityAllocator * allocator);
参数 | 描述 |
---|---|
UnityAllocator * allocator | 要删除的分配器。 |
删除现有的 Allocator 对象。
void* (UNITY_INTERFACE_API * Allocate)(UnityAllocator * allocator, size_t size, size_t align, const char* file, int32_t line);
参数 | 描述 |
---|---|
UnityAllocator * allocator | 用于分配的分配器。 |
size_t size | 要分配的内存大小(以字节为单位)。 |
size_t align | 结果指针的内存地址的对齐方式。 |
const char* file | 进行此分配的调用的源文件路径。在此处使用预定义宏 FILE。 |
int32_t line | 进行此分配的调用的源文件中的行号。在此处使用预定义宏 LINE。 |
使用现有的分配器分配一块内存。此方法返回指向新分配内存的指针。
void(UNITY_INTERFACE_API * Deallocate)(UnityAllocator * allocator, void* ptr, const char* file, int32_t line);
参数 | 描述 |
---|---|
UnityAllocator * allocator | 用于释放的分配器。 |
void* ptr | 指向要释放的内存的指针。 |
const char* file | 进行此释放的调用的源文件路径。在此处使用预定义宏 FILE。 |
int32_t line | 进行此释放的调用的源文件中的行号。在此处使用预定义宏 LINE。 |
释放指定指针指向的内存。这不会将指针设置为 NULL。
void* (UNITY_INTERFACE_API * Reallocate)(UnityAllocator * allocator, void* ptr, size_t size, size_t align, const char* file, int32_t line);
参数 | 描述 |
---|---|
UnityAllocator * allocator | 用于重新分配操作的分配器。 |
void* ptr | 指向要释放的内存的指针。 |
size_t size | 要分配的内存大小(以字节为单位)。 |
size_t align | 结果指针的内存地址的对齐方式。 |
const char* file | 进行此重新分配的调用的源文件路径。在此处使用预定义宏 FILE。 |
int32_t line | 进行此重新分配的调用的源文件中的行号。在此处使用预定义宏 LINE。 |
重新分配现有的指针以指向不同的内存块。
以下是 IUnityMemoryManager
接口的实现示例。
#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__);
}