Gast wrote:
> ahhh... er hat quasi sowas wie:
>
> Index = 0;
> for(a=9;a>=0; a--)
> {
> tmpdata[Index] = 0;
> tmpdata[Index+1] = 0;
> tmpdata[Index+2] = 0;
>
> Index += 3;
> }
>
> draus gemacht?
So ähnlich
unsigned char* data = tmpdata;
for(a=9;a>=0; a--)
{
*data = 0;
*(data + 1) = 0;
*(data + 2) = 0;
data += 3;
}
Für die Arrayindizierung bräuchte er ja wieder eine
Multiplikation. Aber du hast das Prinzip schon richtig
erkannt :-)
> Das is ja geschickt.
Gelle. So ein Compiler hat heutzutage schon eine Menge
Optimierungen drauf. Manchmal haut er gcc-Optimizer auch
ein bischen daneben. Das liegt aber daran, dass der gcc
nicht nur für µC gebaut ist, sondern eine breite Palette
von Prozessoren, bis hin zu Grossrechnern abdecken muss.
Und dann gibt es noch den C Standard, der manchmal eine
Optimierung, die ein Assemblerprogrammierer machen würde,
verhindert.
> Macht er das immer oder nur bei eingeschalteten
> Optimierungen?
Die muessen schon eingeschaltet sein.
Der Grund dafür ist: Wenn du so eine Optimierung im Debugger
duchsteppst, dann erkennst du den Programmfluss nicht mehr
wieder: Zeilen werden in seltsamen Reihenfolgen ausgeführt,
Variablen ändern ihren Wert nicht so, wie man es aus dem
C-Quellcode erwarten würde, etc.
Beim Debuggen wäre sowas verwirrend, also sollte man zum
Debuggen eine Möglichkeit haben, Optimierungen gänzlich
abzuschalten.