Pergunta

Em que circunstâncias devo esperar memcpys para atribuições superam em hardware moderno Intel / AMD? Eu estou usando GCC 4.2.x em uma plataforma Intel de 32 bits (mas estou interessado em 64 bit também).

Foi útil?

Solução

Você nunca deve esperar que eles outperform atribuições. A razão é, o compilador irá utilizar memcpy qualquer maneira, quando se pensa que seria mais rápido (se você usa bandeiras Otimizar). Se não e se a estrutura é pequena razoável de que ele se encaixa em registros, manipulação registo direta poderiam ser usados ??que não exigem qualquer acesso à memória em tudo.

GCC tem padrões especiais de bloco-move internamente que descobrir quando a alteração diretamente registros / células de memória, ou quando usar a função memcpy. Nota ao atribuir a struct, o compilador sabe em tempo de compilação como é grande o movimento vai ser, para que ele possa desenrolar cópias pequenas (fazer um movimento n vezes em linha em vez de looping), por exemplo. Nota -mno-memcpy:

-mmemcpy
-mno-memcpy
    Force (do not force) the use of "memcpy()" for non-trivial block moves.  
    The default is -mno-memcpy, which allows GCC to inline most constant-sized copies.

Quem sabe isso melhor quando usar memcpy que o próprio compilador?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top