Является ли memcpy()
обычно быстрее, чем strcpy()
(на большинстве реальных платформ)? (Я предполагаю, что размер строки известен.)
Если я правильно помню ассемблер i386, есть loop
инструкции, которые копируют заданное количество байтов или слов. Так что это самый быстрый способ, в то время как strcpy()
реализация ассемблера i386 будет использовать ручную проверку '\0'
в простом цикле.
Так что я чувствую, что на x86 memcpy()
быстрее, чем strcpy()
.
А как насчет других архитектур?
memcpy
много лет назад разбил копию на три части: невыровненный префикс, основную часть и невыровненный суффикс. Это означает, что вопросы выравнивания прозрачны для пользователя, а большая часть копии (основная часть) выполняется с максимальной скоростью выравнивания с использованием полноразмерных (например, 32-битных) передач. - person user3386109   schedule 26.07.2014loop
— один из самых медленных способов, его больше никто не использует. Старые реализации libc используютrep movsb
, тогда как более новые используют SIMD для ускорения. Почему сложные memcpy/memset лучше? - person phuclv   schedule 29.08.2018