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

UnsafeUtility.MallocTracked

Declaration

public static void* MallocTracked(long size, int alignment, Unity.Collections.Allocator allocator, int callstacksToSkip);

Параметры

Параметр Описание
размер Размер блока памяти для выделения, в байтах. Убедитесь, что размер является достаточным для предполагаемого хранения данных, чтобы избежать переполнения буфера.
выравнивание Задает выравнивание блока памяти. Выравнивание должно быть в степени двух, чтобы обеспечить эффективные шаблоны доступа к памяти для различных архитектур процессоров.
распределитель Распределитель памяти, используемый для управления выделением. Выберите тип распределителя, соответствующий предполагаемому сценарию использования выделенной памяти, например Allocator.Temp или Allocator.Persistent.
callstacksToSkip Указывает число кадров стека вызовов, пропускаемых при отслеживании памяти. Настройте это значение, чтобы уточнить степень детализации трассировки стека, собираемой для профилирования памяти.

Возвращаемое значение

void* Указатель на выделенный блок памяти. Управляйте этим указателем аккуратно, обеспечивая его надлежащее высвобождение, чтобы предотвратить утечки памяти и доступ к недействительной памяти.

Описание

Выделяет блок памяти с указанным размером, выравниванием и сведениями о трекинге.

Метод MallocTracked выделяет память, одновременно предоставляя параметры для отслеживания выделений памяти для целей отладки и профилирования. Эта функция похожа на UnsafeUtility.Malloc, но с дополнительным отслеживанием, которое помогает идентифицировать выделения памяти, которые могут способствовать утечке памяти или неэффективности в приложениях, требующих высокой производительности.

Убедитесь, что выделенная память надлежащим образом высвобождается с помощью UnsafeUtility.Free, когда она больше не требуется, чтобы избежать утечки памяти. Сбалансируйте значение параметра callstacksToSkip, чтобы сосредоточиться на потребностях отладки, минимизируя накладные расходы.

using System.Runtime.InteropServices;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using UnityEngine;

public class MallocTrackedSimplifiedExample : MonoBehaviour { void Start() { // Enable Native Leak Detection with stack trace for debugging UnsafeUtility.SetLeakDetectionMode(NativeLeakDetectionMode.EnabledWithStackTrace); // Allocate a block of memory for a CustomNativeArray Allocate(10, Allocator.Persistent, out CustomNativeArray<int> array);

// NOTE: Not freeing the buffer in this example; this is intentional for demonstration. // During a Domain reload, such as entering/exiting Play Mode, a warning will appear // if memory is not properly freed, aiding in identifying leaks. }

[StructLayout(LayoutKind.Sequential)] unsafe struct CustomNativeArray<T> where T : struct { public void* m_Buffer; public int m_Length; public Allocator m_AllocatorLabel; }

static void Allocate<T>(int length, Allocator allocator, out CustomNativeArray<T> array) where T : struct { long totalSize = UnsafeUtility.SizeOf<T>() * length; array = default;

unsafe { // Allocate memory with leak detection tracking array.m_Buffer = UnsafeUtility.MallocTracked(totalSize, UnsafeUtility.AlignOf<T>(), allocator, 0); }

// Set the array metadata array.m_Length = length; array.m_AllocatorLabel = allocator; } }

См. также: UnsafeUtility.FreeTracked, UnsafeUtility.Malloc, UnsafeUtility.SetLeakDetectionMode.

Declaration

public static void* MallocTracked(long size, int alignment, Unity.Collections.MemoryLabel label, int callstacksToSkip);

Параметры

Параметр Описание
размер Размер блока памяти для выделения, в байтах. Убедитесь, что размер является достаточным для предполагаемого хранения данных, чтобы избежать переполнения буфера.
выравнивание Задает выравнивание блока памяти. Выравнивание должно быть в степени двух, чтобы обеспечить эффективные шаблоны доступа к памяти для различных архитектур процессоров.
метка Метка памяти для выделения под.
callstacksToSkip Указывает число кадров стека вызовов, пропускаемых при отслеживании памяти. Настройте это значение, чтобы уточнить степень детализации трассировки стека, собираемой для профилирования памяти.

Возвращаемое значение

void* Указатель на выделенный блок памяти. Управляйте этим указателем осторожно, чтобы предотвратить утечку памяти и обеспечить правильное выделение.

Описание

Выделяет блок памяти с указанным размером, выравниванием, меткой памяти и информацией о отслеживании.

Метод MallocTracked выделяет память, одновременно предоставляя опции для отслеживания выделений памяти для отладки и профилирования. Эта функция похожа на UnsafeUtility.Malloc, но с дополнительным отслеживанием, которое помогает идентифицировать выделения памяти, которые могут способствовать утечке памяти или неэффективности в приложениях, требующих высокой производительности.

Указание метки памяти помогает в профилировании и отладке использования памяти в Unity.

Чтобы избежать утечки памяти, высвобождайте выделенную память с помощью UnsafeUtility.Free, когда она больше не требуется. Сбалансируйте значение параметра callstacksToSkip, чтобы сосредоточиться на потребностях отладки, минимизируя накладные расходы.

См. также: MemoryLabel, UnsafeUtility.FreeTracked, UnsafeUtility.Malloc, UnsafeUtility.SetLeakDetectionMode.