Для случаев, когда T мало, я бы специализировался и использовал нативное назначение.
Например, где T равно 1, просто назначьте один символ.
Если вы знаете,адреса выровнены, используйте тип int для вашей платформы с соответствующим размером.
Если адреса не выровнены, вам может быть лучше выполнить соответствующее количество назначений символов.
Точкаэто делается для того, чтобы избежать ветвления и сохранения счетчика.
Если T велико, я был бы удивлен, если бы вы справились лучше, чем библиотека memcpy (), и накладные расходы на вызов функции, вероятно, были бы потеряны вшум.Если вы хотите оптимизировать, посмотрите вокруг реализации memcpy ().Существуют варианты, в которых используются расширенные инструкции и т. Д.
Обновление:
Если посмотреть на ваш актуальный (!) Вопрос о встраивании memcpy, такие вопросы, как версии компилятора и платформы становятся актуальными.Из любопытства вы пробовали использовать std :: copy, что-то вроде этого:
template<int T>
inline void load_binary_fixm(void *address)
{
if( (at + T) > len )
stream_error();
std::copy(at, at + T, static_cast<char*>(address));
at += T;
}