memcpy vs atribuição em C
-
11-07-2019 - |
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).
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?