UnsafeUtility.SizeOf
Declaration
public static int SizeOf();public static int SizeOf(Type type);Параметры
| Параметр | Описание |
|---|---|
| тип | Тип, размер которого в байтах должен быть определен. |
Возвращаемое значение
инт Общий размер в байтах указанного типа, включая любые прокладки для выравнивания, необходимые для эффективного доступа к памяти.
Описание
Определяет размер в байтах указанного типа, включая заполнение для выравнивания.
Метод SizeOf вычисляет количество байтов, необходимых для хранения одного экземпляра указанного типа. Это включает в себя любую заполняемость, необходимую для правильного выравнивания памяти, что обеспечивает эффективный доступ к данным и соответствие оборудования.
Используйте этот метод при ручном выделении памяти или интерфейсе с системами низкого уровня в Unity. Это необходимо для задач, требующих точного контроля за использованием памяти, таких как пользовательские структуры данных или взаимодействие с нативными плагинами.
using UnityEngine; using Unity.Collections.LowLevel.Unsafe; using System.Runtime.InteropServices; using Unity.Collections;
public class SizeOfExample : MonoBehaviour { [StructLayout(LayoutKind.Sequential)] struct ComplexStruct { public byte SmallValue; public double LargeValue; public short MediumValue; }
void Start() { // Calculate and log the size of ComplexStruct int structSize = UnsafeUtility.SizeOf<ComplexStruct>(); Debug.Log($"Size of ComplexStruct: {structSize} bytes");
// Using SizeOf to allocate memory for an array of ComplexStruct unsafe { void* structBuffer = UnsafeUtility.Malloc(structSize * 5, UnsafeUtility.AlignOf<ComplexStruct>(), Allocator.Temp);
// Cast the buffer to work with the ComplexStruct type ComplexStruct* structArray = (ComplexStruct*)structBuffer; for (int i = 0; i < 5; i++) { structArray[i].SmallValue = (byte)i; structArray[i].LargeValue = i * 2.2; structArray[i].MediumValue = (short)(i * 10); Debug.Log($"Struct[{i}]: SmallValue = {structArray[i].SmallValue}, LargeValue = {structArray[i].LargeValue}, MediumValue = {structArray[i].MediumValue}"); }
// Free the allocated memory UnsafeUtility.Free(structBuffer, Allocator.Temp); } } }
Дополнительные ресурсы: UnsafeUtility.MallocTracked UnsafeUtility.AlignOf.