Каково различие между memmove и memcpy?

Windows очень хорошо.

Солярис является замечательной средой разработки Java также (мне нравится он лучше, чем Windows, но по субъективным причинам), но если Вы не развертываетесь на нем, на это не могло бы стоить переключаться.

Linux является немного неуклюжим для разработки Java, но выполнимым.

единственным, который я не могу рекомендовать, является Mac, потому что они находятся всегда до сих пор позади на версии доступного Java (Не обеспеченный Sun, Apple делает их собственное).

111
задан Community 14 December 2016 в 08:55
поделиться

4 ответа

С memcpy место назначения вообще не может перекрывать источник. С memmove это возможно. Это означает, что memmove может быть немного медленнее, чем memcpy , поскольку он не может делать те же предположения.

Например, memcpy может всегда копировать адреса из снизу вверх. Если пункт назначения перекрывается после источника, это означает, что некоторые адреса будут перезаписаны перед копированием. memmove обнаружит это и скопирует в другом направлении - от высокого к низкому - в этом случае. Однако проверка этого и переключение на другой (возможно, менее эффективный) алгоритм требует времени.

154
ответ дан 24 November 2019 в 03:00
поделиться

memmove может обрабатывать перекрывающуюся память, memcpy не может.

Учтите

char[] str = "foo-bar";
memcpy(&str[3],&str[4],4); //might blow up

Очевидно, что источник и место назначения теперь перекрываются, мы перезаписываем «-bar» с «bar». Это неопределенное поведение с использованием memcpy , если исходный код и место назначения перекрываются, поэтому в этом случае нам понадобится memmove .

memmove(&str[3],&str[4],4); //fine
31
ответ дан 24 November 2019 в 03:00
поделиться

Из справочной страницы memcpy .

Функция memcpy () копирует n байтов из области памяти src в область памяти dest. Области памяти не должны перекрытие. Используйте memmove (3), если память области действительно перекрываются.

22
ответ дан 24 November 2019 в 03:00
поделиться

Один обрабатывает перекрывающиеся пункты назначения, другой - нет.

10
ответ дан 24 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: