[英]C++ compiler questions regarding increment operators
為什么在舊的編譯器中使用前綴增量運算符而不是后綴運算符被認為是不好的做法? 以我的理解,現代編譯器對此進行了優化,而舊編譯器則沒有。 是否有一個特殊的原因,一個要比另一個慢,並且要在編譯代碼中對其進行優化? 如果您能提供有關運算符和編譯器的任何其他詳細信息,謝謝,
“舊”必須表示“非常舊”。
原因是在進行真正優化之前,用於C / Unix開發的主要系統是PDP-11,后來是VAX-11。 PDP和VAX具有前遞減和后遞增尋址模式。
MOVL R0, -(R1) ; Decrements R1 by 4 and move the value of R0 to that location.
MOVL (R1)+, R2 ; Move the value at R1 to R2 then add 4 to R1.
那么這些將等於
*(--a) = b ;
b = *(a++) ;
在幾乎沒有優化的日子里,這些可以很容易地映射回底層的匯編指令。
同時,不存在以下尋址方式:
MOVL (R0)-, R1
MOVL +(R0), R1
因此,沒有硬件映射到
*(++a) = b ;
b = *(a--) ;
-(Rx)和(Rx)+尋址模式使實現向下增長的堆棧變得容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.