Что касается темы: реализация memmove на C, я не понял, почему перекрытие памяти для двух разных переменных? то есть является ли это нормальным сценарием, когда компилятор выделяет одно и то же «общее пространство» для двух разных переменных, и почему эта политика используется компиляторами в таких случаях?
реализация меммове
Ответы (2)
Ничего общего с компилятором. Рассмотрим следующее:
int x[100];
memmove(&x[1], &x[0], 99*sizeof(int));
person
Oliver Charlesworth
schedule
19.02.2011
Дело не в том, что компилятор создает перекрывающиеся переменные. Просто спецификация memmove
говорит, что он должен работать, даже если источник и место назначения перекрываются. Если нет никаких шансов на перекрытие двух, вы обычно хотите использовать memcpy
, который обычно будет быстрее, но дает неопределенное поведение, если они перекрываются.
person
Jerry Coffin
schedule
20.02.2011