Gast
#672625
Hallo, ich möchte die variable cache mit 0x00 initialisieren. Kann mir jemand kurz erläutern welche Variante die bessere oder schnellere ist?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
HW: ATMEGA128
|
Anzeige
|
Memset via schleife
Gast
#672625
Hallo, ich möchte die variable cache mit 0x00 initialisieren. Kann mir jemand kurz erläutern welche Variante die bessere oder schnellere ist?
HW: ATMEGA128
Gast
#672629
Ich würde schätzen, daß auf einem AVR beide gleich schnell sind. Es würde mich nicht wundern, wenn der Compiler erkennt, was die for-Schleife tut und diese automatisch durch einen memset-Aufruf ersetzt. Dieser wiederum wird (zumindest bei GCC) vom Compiler selbst intern dann in die optimale Variante für den jeweiligen Prozessor umgesetzt. @ Rolf Magnus (Gast) >Ich würde schätzen, daß auf einem AVR beide gleich schnell sind. ICh würde schätzen, dass memset() schneller ist, weil es handoptimiert ist (ASM?). >Es würde mich nicht wundern, wenn der Compiler erkennt, was die >for-Schleife tut und diese automatisch durch einen memset-Aufruf >ersetzt. Würde ich nicht drauf spekulieren. > Dieser wiederum wird (zumindest bei GCC) vom Compiler selbst >intern dann in die optimale Variante für den jeweiligen Prozessor >umgesetzt. Praktisch. Simulier einfach mal beide im AVR Studio und schau dir die benötigten Taktzyklen an. MFG Falk
Gast
#672735
> ICh würde schätzen, dass memset() schneller ist, weil es handoptimiert > ist (ASM?). Naja, beim AVR gibt's nicht viele Möglichkeiten, einen Speicherblock zu kopieren, und der C-Code für die Schleife ist so einfach, daß ich schon mit einem optimalen Ergebnis gerechnet hätte. > Simulier einfach mal beide im AVR Studio und schau dir die > benötigten Taktzyklen an. Ich habe kein AVR-Studio, aber ich kann mir den ASM-Code anschauen: For-Schleife:
memcpy:
Die memcpy-Variante ist tatsächlich pro Durchlauf einen Taktzyklus schneller, aber nur weil bei der for-Schleife das Register r24 in jedem Schleifendurchlauf unnötigerweise neu geladen wird. Sonst wären die beiden gleich schnell. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|