Я хочу записать повторяющийся шаблон байтов в блок памяти. Моя идея - написать первый пример паттерна, а затем скопировать его в остальную часть буфера. Например, если я начну со следующего:
ptr: 123400000000
После этого я хочу, чтобы это выглядело так:
ptr: 123412341234
Я думал, что могу использовать memcpy
для записи в пересекающиеся области, например:
memcpy(ptr + 4, ptr, 8);
Стандарт не определяет, в каком порядке будет происходить копирование, поэтому, если какая-то реализация заставляет копировать в обратном порядке, это может дать разные результаты:
ptr: 123412340000
или даже комбинированные.
Есть ли обходной путь, позволяющий мне по-прежнему использовать memcpy
, или мне нужно реализовать собственный цикл for? Обратите внимание, что я не могу использовать memmove
, потому что он делает именно то, чего я пытаюсь избежать; он делает ptr 123412340000
, а я хочу 123412341234
.
Я программирую для Mac / iPhone (компилятор clang), но общий ответ тоже будет хорош.