繁体   English   中英

有关增量运算符的C ++编译器问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM