UnsafeUtility
класс в Unity.Collections.LowLevel.Unsafe
Выполнено в:UnityEngine.CoreModule
Описание
Предоставляет коллекцию низкоуровневых, небезопасных методов утилиты для операций с памятью в Unity.
UnsafeUtility класс предоставляет функции прямой работы с памятью. Они небезопасны, поскольку позволяют обойти ограничения безопасности управляемого кода. С их помощью можно напрямую выделять и освобождать память, копировать и заполнять её.
Используйте эти методы с крайней осторожностью, чтобы избежать утечки памяти, нарушения доступа или повреждения данных. UnsafeUtility класс предназначен для случаев, когда производительность критична, а издержки на безопасность управляемой памяти недопустимы.
Обычные случаи использования включают взаимодействие с нативным кодом, критически важные секции в пользовательских коллекциях или игровых системах и низкоуровневые манипуляции, требуемые конкретными алгоритмами.
using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using UnityEngine;
public class UnsafeUtilityExample : MonoBehaviour { void Start() { unsafe { // Allocate a block of unmanaged memory to store 10 integers int sizeOfInt = UnsafeUtility.SizeOf<int>(); int length = 10; void* memoryBlock = UnsafeUtility.Malloc(sizeOfInt * length, 4, Allocator.Temp);
// Write data to the allocated memory for (int i = 0; i < length; i++) { UnsafeUtility.WriteArrayElement<int>(memoryBlock, i, i * 10); }
// Read and print data from the allocated memory for (int i = 0; i < length; i++) { int value = UnsafeUtility.ReadArrayElement<int>(memoryBlock, i); Debug.Log("Value: " + value); }
// Free the allocated unmanaged memory UnsafeUtility.Free(memoryBlock, Allocator.Temp); } } }
Дополнительные ресурсы: NativeArray<T0>, NativeArrayUnsafeUtility, Обзор системы заданий.
Статические методы
| Метод | Описание |
|---|---|
| AddressOf | Получает адрес памяти указанного объекта в качестве указателя. |
| AlignOf | Возвращает минимальное требование к выравниванию памяти для указанного типа структуры. |
| ArrayElementAsRef | Получает ссылку на значение типа T в массиве с указанным индексом в памяти. |
| As | Выполняет небезопасное преобразование указанного объекта в другой тип. |
| AsRef | Возвращает ссылку на структуру, расположенную по конкретному адресу в памяти. |
| CheckForLeaks | Получает список утечек памяти. |
| CopyObjectAddressToPtr | Присваивает ссылку на объект структуре или закреплённому классу. |
| CopyPtrToStructure | Копирует sizeof(T) байт из указателя на память в структуру. |
| CopyStructureToPtr | Копирует sizeof(T) байт из указателя на память в структуру. |
| EnumEquals | Определяет, равны ли указанные энумы без боксирования. |
| EnumToInt | Возвращает целочисленное представление значения перечисления без упаковки. |
| ForgiveLeaks | Сообщает системе проверки утечек игнорировать любые выделения памяти, сделанные до этого момента. |
| Free | Освободит блок памяти, который был ранее выделен. |
| FreeTracked | Свободная память с отслеживанием утечек. |
| GetFieldOffset | Возвращает смещение поля относительно структуры или класса, в котором оно содержится. |
| GetLeakDetectionMode | Получить режим обнаружения утечки памяти. |
| IsBlittable | Определяет, является ли структура blittable. |
| IsNativeContainerType | Проверяет, является ли структура или тип NativeContainer. |
| IsUnmanaged | Проверяет, является ли структура или тип неуправляемым. |
| IsValidAllocator | Возвращает true, если метка allocator допустима и может использоваться для выделения или отмены выделения памяти. |
| IsValidNativeContainerElementType | Проверяет приемлемость типа в качестве типа элемента в основном контейнере. |
| Malloc | Выделяет блок памяти указанного размера и выравнивания. |
| MallocTracked | Выделяет блок памяти с указанным размером, выравниванием и сведениями о трекинге. |
| MemClear | Очистка блока памяти, установка всех байт на нуль. |
| MemCmp | Проверяет идентичность двух областей памяти. |
| MemCpy | Копирует указанное количество байтов из расположения исходной памяти в расположение конечной памяти. |
| MemCpyReplicate | Копирует память из источника в назначение и реплицирует ее несколько раз. |
| MemCpyStride | Копирует данные между блоками памяти с заданными шагами, позволяя пропускать байт как в источнике, так и в назначении. |
| MemMove | Копирует указанное количество байтов из расположения исходной памяти в место назначения, допуская перекрывающиеся области. |
| MemSet | Устанавливает блок памяти с указанным значением в байтах для определенного размера. |
| MemSwap | Обмен содержимым двух буферов памяти одного и того же размера. |
| PinGCArrayAndGetDataAddress | Прикрепляет массив, собранный с помощью garbage-collection (GC), и возвращает адрес его первого элемента, обеспечивая, чтобы расположение массива в памяти оставалось фиксированным. |
| PinGCObjectAndGetAddress | Прикрепляет объект к памяти, обеспечивая его сохранение в фиксированном месте памяти во время сбора мусора. |
| ReadArrayElement | Читать элемент массива. |
| ReadArrayElementWithStride | Чтение элемента массива с шагом. |
| ReleaseGCObject | Отпускает GC handler, полученный из UnsafeUtility.PinGCObjectAndGetAddress или UnsafeUtility.PinGCArrayAndGetDataAddress. |
| SetLeakDetectionMode | Установите режим обнаружения утечки. |
| SizeOf | Определяет размер в байтах указанного типа, включая заполнение для выравнивания. |
| WriteArrayElement | Запись элемента массива. |
| WriteArrayElementWithStride | Запись элемента массива с шагом. |