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.