Question

Dans quelles circonstances devrais-je m'attendre à ce que memcpys surpasse les affectations sur du matériel INTEL / AMD moderne? J'utilise GCC 4.2.x sur une plate-forme Intel 32 bits (mais je suis également intéressé par la version 64 bits).

Était-ce utile?

La solution

Vous ne devez jamais vous attendre à ce qu'ils surpassent les missions. La raison en est que le compilateur utilisera quand même memcpy quand il pense que ce serait plus rapide (si vous utilisez des drapeaux d'optimisation). Si ce n'est pas le cas et si la structure est assez petite pour tenir dans les registres, vous pouvez utiliser une manipulation de registre directe qui ne nécessite aucun accès à la mémoire.

GCC a des modèles spéciaux de déplacement de bloc en interne qui déterminent quand modifier directement les registres / cellules mémoire ou quand utiliser la fonction memcpy. Remarque Lors de l'affectation de la structure, le compilateur sait, au moment de la compilation, quelle sera la taille du déplacement. Il peut ainsi dérouler de petites copies (effectuer un déplacement n fois en ligne au lieu de boucler), par exemple. Remarque -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.

Qui sait le mieux quand utiliser Memcpy que le compilateur lui-même?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top