Обычный memcpy идёт по всем трем
Ну в glibc генерик реализация вроде скопируем по байтам до выравнивания по 8, потом по 8 до конца странички, потом странички, потом аналогично началу. Ну указатели на странички поменять, это не трогает физическую память, остальное должно читаться/писаться кешлиниями.