Skip to content

Latest commit

 

History

History
9 lines (6 loc) · 1014 Bytes

指针和引用在内存中的表现形式有何不同?.md

File metadata and controls

9 lines (6 loc) · 1014 Bytes

在很多实现中,引用通常通过编译器使用指针来实现。然而,从语义上讲,引用更类似于直接操作所引用的对象,而不需要通过解引用指针那样的间接层。

  • 汇编层面,对引用的操作往往会被转换成直接对引用所绑定对象的内存地址的操作,就像使用指针一样。
  • 当函数参数以引用方式传递时,底层可能也是通过传递对象的地址(即指针)来实现的,但在函数内部,这个地址被自动解引用,因此开发者感受到的是直接操作对象本身。

编译器可能会对引用和指针的使用进行优化:

  • 对于引用,在某些情况下(尤其是在优化等级较高时),编译器可能完全不会分配用于存储地址的内存,特别是当引用作为函数参数或局部变量时,编译器可以选择直接操作原始对象
  • 对于指针,由于存在指针算术和可能的重新赋值,编译器的优化能力可能会受到限制。