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

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.