@memcpy — 메모리 영역을 다른 영역으로 복사하기
@memcpy — 메모리 영역을 다른 영역으로 복사하기
한 메모리에 담긴 내용을 통째로 다른 메모리로 옮기고 싶을 때가 있어요. 일일이 원소를 순회하며 대입할 수도 있지만, 바이트를 그대로 복사해 주는 내장 함수가 따로 있어요. 바로 @memcpy입니다. 한 메모리 영역(region)의 바이트를 다른 메모리 영역으로 복사해 주는 함수죠.
본문
시그니처는 이렇게 생겼어요.
@memcpy(noalias dest, noalias source) void
dest는 붙여 쓸 수 있는(mutable) 대상이어야 해요. 구체적으로는 mutable 슬라이스(slice), mutable 배열 포인터, mutable many-item 포인터 중 하나면 되고, 정렬(alignment)이나 원소 타입은 어떤 것이든 상관없어요. source는 슬라이스, 배열 포인터, many-item 포인터 중 하나면 되고, 역시 정렬이나 원소 타입은 자유롭습니다.
source의 원소 타입은 dest의 원소 타입과 메모리상 표현(in-memory representation)이 같아야 해요. 그리고 for 루프와 비슷하게, source와 dest 중 적어도 하나는 길이(length)를 제공해야 해요. 둘 다 길이를 제공한다면 두 길이는 반드시 같아야 합니다.
마지막으로 중요한 제약이 하나 있어요. 두 메모리 영역은 겹치면 안 됩니다. dest와 source가 같은 바이트 영역을 가리키며 복사하는 상황은 허용되지 않아요. 겹치는 영역을 다뤄야 한다면 @memmove를 써야 합니다.