C/C++指针的由来和功效

指针一直是个头疼的问题,看林锐写的指导,他当初写了十万行代码但是就是避免用指针全部用数组,可见指针确实令人生畏惧------另一个令程序员头疼的是中断。他们有同一个性质:跟硬件太相关,而硬件又设计得偏偏很复杂,偏偏硬件和软件又是貌似两种思维模式,能融会贯通的人数量不多。所以我打算从硬件端说一下指针的由来。

事情得从计算机体系结构开始。

1) 速度:

CPU在设计的时候(知道为什么Linus大神跑到一个设计CPU的名不见经传的公司去打工了吧,他是为了彻底搞清楚这件事),内部是有一堆“寄存器”的,register,简写reg。比如verilog语言是这样定义的:

reg [31:0] regA;

然后CPU内的控制单元往regA里面读写数据因为在CPU内部,速度非常之快,并且可以流水。并且把regA加或者减1这种运算也非常之快,不需要往外部总线上去取数据,写完还要存回去。

辣么,如果我要读一堆地址连续的数据,直接把寄存器regA++,然后按照regA的值去查找内存,速度也会快很多,比先查找内存某个地方得到地址数据,再改变地址总线数据去找那个数据要节省N次总线访问的时间。

通常CPU芯片设计里会有个“寄存器堆”,有很多寄存器可用。我猜编译器在用完register之后也许会用内存里面的某个地址作为指针,但是现在很多书和文章直接说指针就是存在内存中的一段地址,这是不靠谱的。那样速度优势并没有发挥出来。

而内存在verilog里面例如是这样定义的:

reg [31:0] mem [1023:0];  //这是一个32bit宽1K深度的内存

它需要通过总线和地址来访问。

2)方便:数组操作

我觉得指针最大好处是方便数组操作,当你需要连续读取一堆连续地址的数据时,真是太爽了!

3)可以用来写底层驱动

写底层驱动你必须得亲自操作总线去访问外设的寄存器(又是寄存器,不过性质真的和CPU里的寄存器一样)。假如没有指针,怎么去访问总线?

4)函数指针传递

待续。。。有时间再加



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值