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

UnsafeUtility.MemMove

Declaration

public static void MemMove(void* destination, void* source, long size);

Параметры

Параметр Описание
место назначения Указатель на начало блока памяти назначения. Убедитесь, что этот блок достаточно большой, чтобы вместить указанное количество байт, чтобы предотвратить переполнение.
источник Указатель на начало блока исходной памяти. Этот блок содержит данные, подлежащие перемещению, и должен быть действительным для всего размера операции перемещения.
размер Число байтов, которые должны быть перенесены из источника в назначение. Это значение должно быть положительным и меньше или равно размерам обоих блоков памяти.

Описание

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

Метод MemMove предназначен для перемещения блока памяти из одного места в другое. В отличие от стандартных операций копирования памяти, MemMove может безопасно обрабатывать перекрывающиеся области памяти, обеспечивая правильную передачу данных, даже когда области источника и назначения перекрываются.

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

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

public class MemMoveOverlapExample : MonoBehaviour { void Start() { int numElements = 10;

// Allocate a buffer using stackalloc with space for 20 elements unsafe { byte* buffer = stackalloc byte[numElements * 2];

// Initialize the buffer with initial values for (int i = 0; i < numElements; i++) { buffer[i] = (byte)(i + 1); // Fills buffer with values 1 to 10 }

Debug.Log("Buffer before MemMove:"); for (int i = 0; i < numElements * 2; i++) { Debug.Log(buffer[i]); }

// Perform a MemMove operation to simulate overlapping memory move // Move the first 10 bytes (1 to 10) to the next starting position (5) UnsafeUtility.MemMove(buffer + 5, buffer, numElements);

Debug.Log("Buffer after MemMove:"); for (int i = 0; i < numElements * 2; i++) { Debug.Log(buffer[i]); } } } }

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