Hi,
Abgesehen davon wird in allen mir bekannten Systemen bei 'a=a+1' tatsächlich der Wert 'a' mit dem Wert '1' zusammengezählt und anschließend nach 'a' gespeichert, während bei 'a++' der Speicher direkt an der richtigen Stelle modifiziert wird.
Darueber solltest Du nochmal nachdenken. In welcher Weise wird denn bei 'a++' der Speicher modifiziert? Der neue Wert wird also reingeschrieben. Ok, und wo kommt der her? Der Speicher selbst kann nicht addieren, das macht immer noch der Prozessor. Also der Prozessor hat das neue a berechnet. Aber was wurde als Ursprungswert fuer a genommen? Woher sollte den der Prozessor wissen? Er musste ihn natuerlich auch erst aus dem Speicher holen. In jedem Falle muss also a in ein Prozessorregister gelesen, dort 1 addiert und schliesslich der neue Wert wieder zurueckgeschrieben werden.
Jedoch kann man sich (als Compiler) tatsaechlich voellig bescheuert anstellen und auf einer Intel-Architektur folgendes 1:1 uebersetzen:
; a = a + 1
mov eax, [a]
inc eax
mov [a], eax
; a += 1
add dword ptr [a], 1
; a++
inc dword ptr [a]
Hier ergibt sich in erster Linie ein Unterschied in der Code-Groesse (im ersten Beispiel gleich zweimal Adressierung von a (jedesmal +4 Bytes bei 32-Bit-Umgebung)). Die Ausfuehrungsgeschwindigkeit sollte bei modernen Prozessorarchitekturen weniger differieren, wenn alle Befehlsbytes schoen im Cache sind (denke ich mir so).
Alles in allem ist es also nicht dasselbe, wenn man einen desastroes dummen Compiler voraussetzt. Nur: welchen in den letzten 20 Jahren produzierte Compiler koennte man so einstufen? Letztlich ist es also doch dasselbe.
Selbst 'a+=1' sollte schneller sein als 'a=a+1'. Ist einfach weniger Kopiererei - und semantische "vielleicht könnte man es ja optimieren"-Vergleiche beschleunigen zwar vielleicht die eine Zuweisung, verlangsamen dafür aber den Rest des Programms.
Was meinst Du damit?
So long