реализация меммове

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


person name_masked    schedule 19.02.2011    source источник


Ответы (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