реализация memmove - PullRequest
       26

реализация memmove

2 голосов
/ 20 февраля 2011

Относительно потока: Реализация memmove в C , я не понял, почему будет перекрытие памяти для 2 разных переменных? то есть это нормальный сценарий, когда компилятор выделяет одно и то же «общее пространство» для 2 разных переменных и почему эта политика используется компиляторами в таких случаях?

Ответы [ 2 ]

10 голосов
/ 20 февраля 2011

Ничего общего с компилятором.Учтите следующее:

int x[100];

memmove(&x[1], &x[0], 99*sizeof(int));
6 голосов
/ 20 февраля 2011

Дело не в том, что компилятор создает переменные, которые перекрываются. Просто спецификация memmove говорит, что она должна работать, даже если источник и пункт назначения перекрываются. Если нет шансов на перекрытие двух, вы обычно хотите использовать memcpy, который обычно будет быстрее, но дает неопределенное поведение, если они перекрываются.

...