Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

239
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda