Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

242
Vistas
rendimiento de memcpy vs cambio de bytes

Hay 2 variables:

 uint32_t var32 = 0xAABBCCDD; uint8_t var8[4] = { 0, 0, 0, 0 };

¿Qué forma de copiar de var32 a var8 sería más rápida?

 for (size_t i = 0; i < sizeof(uint32_t); i++) var8[i] = (uint8_t)(var32 >> (i * 8));

o

 memcpy(var8, &var32, sizeof(uint32_t));

Agradecería todos los consejos.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Suponiendo una arquitectura de 32 bits, el memcpy se reduce a una sola instrucción mov (o similar). Entonces es más rápido. Pero también está mal. Desde el punto de vista de C, está invocando un comportamiento definido por la implementación al hacer eso. Lo que podría suceder en realidad es que sus bytes estén ordenados incorrectamente, dependiendo de si está en una plataforma big endian o little endian . Entonces, solo use la solución de cambio de bits en lugar de preocuparse por el rendimiento.

over 4 years ago · Santiago Trujillo Denunciar

0

El memcpy en C generalmente se garantiza en los compiladores modernos para optimizar y ser la forma más rápida de copiar disponible. Sin embargo, esto supone que está correctamente integrado en su implementación.

Tampoco creo que esto provoque violaciones de alias estrictas ya que los dos punteros nunca tienen alias en la misma memoria.

Sin embargo, el orden en que se copian los bytes de int en qué byte de la matriz está definido por la implementación. Si quisiera asegurarse de que esto siempre estaría en el orden big endian, primero podría ejecutar htonl en el int, lo que lo convertiría en big endian, luego los resultados de la copia estarían bien definidos. Esto también se optimizaría a nada en caso de que no fuera necesario, lo que la convierte en la implementación más rápida en cualquier sistema.

Si, por otro lado, desea un ordenamiento de bytes Little Endian, use htole32 para asegurarse de que el int se convierta en Little Endian en cualquier hardware. Sin embargo, tenga en cuenta que htole32 es una extensión en BSD, Linux y varios otros sistemas operativos y no se garantiza que esté disponible en todas las implementaciones (lectura, no estándar).

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que memcpy será más rápido, porque no calcula solo usa el movimiento. el cambio de byte tiene cálculo de paso de remolque.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda