Unity 6.3
0 онлайн 36 гостей 3 в системе
Вход

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Запись элемента массива с шагом.