В современных компиляторах memcpy в C, как правило, гарантированно является самым быстрым способом копирования. Однако это предполагает, что оно правильно включено в вашу реализацию.
Я также не верю, что это вызывает строгие нарушения псевдонимов, поскольку два указателя никогда не имеют одинаковой памяти.
Однако порядок, в котором байты int копируются, в какой байт массива определена реализация. Если бы вы хотели, чтобы это было всегда, то всегда было бы по большому эндианскому порядку, вы могли бы сначала запустить htonl
на int, который сделал бы его большим endian, тогда результаты копии были бы четко определены. Это также не оптимизировалось бы в случае, если бы это не было необходимо, делая его всегда самой быстрой реализацией в любой системе.
Если, с другой стороны, вы хотите немного упорядочивания байтов по порядку, используйте htole32
, чтобы гарантировать, что int становится мало ориентированным на любом оборудовании. Однако будьте осторожны, что htole32
является расширением в BSD, Linux и различных других операционных системах и не гарантируется быть доступным для всех реализаций (прочитанных, нестандартных).
есть способ заставить endian? Теперь просто любопытно. Редактировать: хорошо, а не по порядку. – Bremen
* endianness * является свойством используемого вами оборудования (например, вашего CPU). так, нет. Однако вы можете проверить это. –
Я имею в виду, что я знаю, что в моей архитектуре немного эндиан. Я просто подумал, что параметр может быть передан для принудительного выполнения определенного порядка. – Bremen