= ...;
TArray<int32> Kinos;
Kinos.SetNum(MemorySize);
FMemory::Memmove(Kinos.GetData(), MemoryPtr, MemorySize);
https://docs.unrealengine.com/5.0/en-US/API/Runtime/Core/Containers/TArray/__ctor/8/
Он копирует элементы, а не перемещает :( Он внутри вызывает CopyToEmpty
А memmove не копирует?
Перемещает же
Перемещает как?
Ну не совсем перемещает, но он по крайней мере новую память не использует
не верно, memmove может двойной объём памяти использовать
Вообще Despite being specified "as if" a temporary buffer is used, actual implementations of this function do not incur the overhead of double copying or extra memory. For small count, it may load up and write out registers; for larger blocks, a common approach (glibc and bsd libc) is to copy bytes forwards from the beginning of the buffer if the destination starts before the source, and backwards from the end otherwise, with a fall back to std::memcpy when there is no overlap at all. https://en.cppreference.com/w/cpp/string/byte/memmove или в анриловском не так?
Да, именно так. Если не вдаваться в детали конкретной оптимизации этой функции, то можно представить, что она в худшем случае использует временный массив. В обычном случае она равно memcopy.
Обсуждают сегодня