Michael Vittrup wrote:
> On Sat, 12 Mar 2005, Bertel Brander wrote:
>
>
>>Min erfaring er at kompilere til små embeddede processorer
>>har en meget simpel memcpy, der kopierer en byte ad gangen.
>>Dette for at slippe for at checke alignement for dest og src, osv.
>
>
> Omvendt er *min* erfaring, at det simpelthen (stort set..) ikke kan gøres
> hurtigere, end ved brug af memcpy. Der skal checkes for alignment i
> starten og slutningen af ens hukommelsesområde, men alt derimellem
> kopieres hurtigst muligt.. men det kommer selvfølgelig an på hvad du mener
> med "små embeddede processorer".
>
>
>
>>Hvis du skal kopiere mange int's er det måske bedre at lave din egen
>>intcpy funktion (evt i assembler).
>
>
> Ikke enig - anvender man den integrerede memcpy, er der faktisk ret stort
> chance for at den udnytter processoren 100%. Det er ikke dumme folk, der
> har implementeret den! Besværer man sig selv med at skrive en memcpy
> kommer den vel typisk op på en 90-95% udnyttelse..
Hvis man ved at det er ints der skal kopieres behøver man ikke checke
for alignment.
En standard memcpy har ingen chance for at vide om src og dest og
størrelsen er aligned og skal derfor, runtime, bruge tid på at
checke det, hvis størrelsen på det der skal kopieres er lille
er dette overhead ikke lille.
Jeg har arbejdet med en kompiler hvor memcpy var implementeret i C,
på samme måde som man ville lære det i et grundkursus i C.
Det kan man let lave bedre i assembler.
--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel