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

UnsafeUtility.MemSwap

Declaration

public static void MemSwap(void* ptr1, void* ptr2, long size);

Параметры

Параметр Описание
ptr1 Указатель на первый буфер памяти. Этот буфер будет заменен на второй.
ptr2 Указатель на второй буфер памяти для обмена с первым. Убедитесь, что оба буфера правильно распределены и имеют одинаковые размеры.
размер Размер в байтах данных, хранящихся в каждом буфере. Это число байт, которые будут обмениваться между двумя буферами.

Описание

Обмен содержимым двух буферов памяти одного и того же размера.

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

Когда области памяти перекрываются, данные из первого буфера копируются во второй, обеспечивая отсутствие повреждения данных. Будьте осторожны, чтобы предоставить правильные указатели и размеры, чтобы избежать непредвиденного поведения.

using UnityEngine;
using Unity.Collections.LowLevel.Unsafe;

public class MemSwapExample : MonoBehaviour { void Start() { int numElements = 3; int size = numElements * sizeof(float);

// Use stackalloc to allocate memory for two buffers unsafe { float* buffer1 = stackalloc float[numElements]; float* buffer2 = stackalloc float[numElements];

// Initialize buffer1 and buffer2 with distinct values buffer1[0] = 1.1f; buffer1[1] = 2.2f; buffer1[2] = 3.3f; buffer2[0] = 4.4f; buffer2[1] = 5.5f; buffer2[2] = 6.6f;

// Output initial contents of the buffers Debug.Log("Before MemSwap:"); Debug.Log($"Buffer1: {buffer1[0]}, {buffer1[1]}, {buffer1[2]}"); Debug.Log($"Buffer2: {buffer2[0]}, {buffer2[1]}, {buffer2[2]}");

// Swap the contents of buffer1 and buffer2 UnsafeUtility.MemSwap(buffer1, buffer2, size);

// Output swapped contents of the buffers Debug.Log("After MemSwap:"); Debug.Log($"Buffer1: {buffer1[0]}, {buffer1[1]}, {buffer1[2]}"); // Expected: 4.4, 5.5, 6.6 Debug.Log($"Buffer2: {buffer2[0]}, {buffer2[1]}, {buffer2[2]}"); // Expected: 1.1, 2.2, 3.3 } } }

Дополнительные ресурсы: ,UnsafeUtility.MemCpy,.