std:: memmove
|
헤더 파일에 정의됨
<cstring>
|
||
|
void
*
memmove
(
void
*
dest,
const
void
*
src,
std::
size_t
count
)
;
|
||
다음 작업을 순서대로 수행합니다:
- 암시적으로 생성 합니다 dest 에 객체를.
- 복사합니다 count 개의 문자를 (마치 unsigned char 타입인 것처럼, 이하 동일) src 가 가리키는 객체로부터 임시 배열 arr 로, 여기서 arr 은 dest 와 src 가 가리키는 객체와 겹치지 않습니다.
- 복사합니다 count 개의 문자를 arr 에서 dest 가 가리키는 객체로.
만약 dest 또는 src 가 null 포인터 또는 유효하지 않은 포인터 인 경우, 동작은 정의되지 않습니다.
목차 |
매개변수
| dest | - | 복사할 메모리 위치를 가리키는 포인터 |
| src | - | 복사할 원본 메모리 위치를 가리키는 포인터 |
| count | - | 복사할 바이트 수 |
반환값
적합한 생성된 객체가 있으면 해당 객체에 대한 포인터를 반환하고, 그렇지 않으면 dest 를 반환합니다.
참고 사항
명세에서는 임시 버퍼가 사용된다고 명시되어 있지만, 이 함수의 실제 구현에서는 이중 복사나 추가 메모리 오버헤드가 발생하지 않습니다. 작은 count 의 경우 레지스터를 로드하고 기록할 수 있으며, 더 큰 블록의 경우 (glibc 및 bsd libc에서) 일반적인 접근 방식은 대상이 소스보다 먼저 시작하는 경우 버퍼의 시작부터 순방향으로 바이트를 복사하고, 그렇지 않은 경우 끝에서 역방향으로 복사하며, 전혀 겹치는 부분이 없을 때는 std::memcpy 로 폴백합니다.
strict aliasing
이 동일한 메모리를 서로 다른 두 타입의 값으로 검사하는 것을 금지하는 경우,
std::memmove
를 사용하여 값을 변환할 수 있습니다.
예제
출력:
1234567890 1234456890
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 4064 | C++98 | 반환된 포인터가 적절히 생성된 객체를 가리키는지 불분명했음 | 명확히 규정됨 |
참고 항목
|
한 버퍼를 다른 버퍼로 복사합니다
(함수) |
|
|
버퍼를 문자로 채웁니다
(함수) |
|
|
두 개의 (겹칠 수 있는) 배열 사이에서 지정된 개수의 와이드 문자를 복사합니다
(함수) |
|
|
(C++11)
|
요소들의 범위를 새로운 위치로 복사합니다
(함수 템플릿) |
|
요소들의 범위를 역순으로 복사합니다
(함수 템플릿) |
|
|
(C++11)
|
타입이 트리비얼하게 복사 가능한지 확인합니다
(클래스 템플릿) |
|
C 문서
for
memmove
|
|