Как происходит перекрытие памяти и как им управлять? - PullRequest
7 голосов
/ 03 сентября 2010

Читая о memmove, я прочитал, что он может обрабатывать ПЕРЕКРЫТИЯ ПАМЯТИ , но я не могу понять, как может происходить перекрытие памяти между двумя строками и как эта функция все еще может правильно копировать блок памяти.

Ответы [ 2 ]

5 голосов
/ 03 сентября 2010

«Перекрытие памяти» не возникает само по себе. Именно вы можете снабдить функцию memmove областями памяти, которые перекрываются. Возьмите два указателя в один и тот же массив , и вы можете легко получить перекрывающиеся области памяти.

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

Непонятно, что вы подразумеваете под второй частью вопроса («как эта функция все еще может правильно копировать блок памяти»). Где вы видите проблему здесь?

3 голосов
/ 03 сентября 2010
 memmove(p+1, p, 42);

Что требует перемещения байтов, начиная с конца. Memcpy () делает беспорядок.

...