2009-09-11 6 views
3

J'ai déjà vu un modèle de programmation (pas de conception), comment implémenter une copie rapide des tampons. Il comprenait une boucle entrelacée et un commutateur. La chose était, il a copié 4 octets la plupart du temps, seuls les derniers octets du tampon ont été copiés en utilisant des types de données plus petits.Modèle pour copie rapide en C

Quelqu'un peut-il m'en dire le nom? C'est le nom d'une personne. C'est fait en C et la sortie du compilateur est presque optimale.

+1

Les compilateurs modernes font mieux de memcpy quand vous appelez memcpy directement et le périphérique Duff est intéressant mais difficile à optimiser pour le compilateur. C'est une méthode ancienne, pas recommandé d'utiliser dans le nouveau code. Même X.org a supprimé tous les Duffs et a augmenté la vitesse. – osgx

Répondre

11

Il semble que vous pensiez à Duff's device.

+0

Vous m'avez battu de 3 secondes :) – qrdl

+0

vous étiez le plus rapide - merci. –

12

Utilisez memcpy(), il est standard, portable et, dans de nombreux cas, bien optimisé aussi.

+1

vous avez raison - c'est la chose à utiliser. Je voulais juste connaître le modèle (mais ne pas l'utiliser). –

+1

+1. memcpy sera généralement beaucoup plus rapide (lire 2x à 4x). –

+3

Le périphérique Duff est optimisé pour réduire le coût de test de la boucle conditionnelle, mais sous sa forme la plus courante, il copie un octet à la fois. memcpy est généralement optimisé pour la taille des mots de l'architecture, y compris éventuellement dérouler pour réduire le nombre de tests, et ne copier que les octets à chaque extrémité des tampons non alignés –

2

Il est appelé dispositif de Duff, voir sur Wikipedia

Si vous souhaitez implémenter/utiliser une copie rapide, puis d'abord regarder la mise en œuvre de votre compilateur; il pourrait utiliser un algorithme beaucoup plus sophistiqué en utilisant les fonctionnalités avancées de votre CPU. Les compilateurs Intel ont des versions assez sophistiquées par exemple.

Questions connexes