Je génère du code où je copie n
mots d'un emplacement de mémoire à un autre emplacement de mémoire sans chevauchement. n
est connu statiquement.Combien de mots valent un memcpy?
Actuellement, j'émets un grand nombre d'instructions de chargement suivies d'un grand nombre d'instructions de stockage, mais je soupçonne qu'à partir d'une certaine valeur de n
, l'appel memcpy
serait plus rapide.
Y a-t-il une ligne directrice bien connue sur le nombre de mots que vous devez copier pour que memcpy
en vaille la peine?
Souvent, 'memcpy' est un compilateur intrinsèque, ce qui signifie que si vous utilisez toujours' memcpy', le compilateur devrait prendre cette décision pour vous. –
Donc, je peux raisonnablement utiliser 'memcpy' même pour copier des mots simples, et peut-on cesser de s'inquiéter? –
Autant que je me souvienne (et il a fallu longtemps pour optimiser un code C, donc je pourrais me tromper), le compilateur remplacera typiquement 'memcpy' pour (par exemple) un seul mot avec la mémoire en ligne équivalente se déplace (ou copie de registre, ou même rien dans certains cas). Je suggère de vérifier l'assembleur généré sur un simple test-case pour être sûr, cependant. –