C/C++指针的由来和功效
来源:互联网 发布:关闭linux防火墙 编辑:程序博客网 时间:2024/04/28 23:02
指针一直是个头疼的问题,看林锐写的指导,他当初写了十万行代码但是就是避免用指针全部用数组,可见指针确实令人生畏惧------另一个令程序员头疼的是中断。他们有同一个性质:跟硬件太相关,而硬件又设计得偏偏很复杂,偏偏硬件和软件又是貌似两种思维模式,能融会贯通的人数量不多。所以我打算从硬件端说一下指针的由来。
事情得从计算机体系结构开始。
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)函数指针传递
待续。。。有时间再加
- C/C++指针的由来和功效
- C语言中的逻辑操作的‘功效’
- 浅析C语言的由来
- C/C++重复定义问题的由来和解决方法
- C指针和指针的指针
- c和c指针
- C/C++,指针的定义和使用
- 【C/C++】引用和指针的区别
- 【C/C++】数组和指针的区别
- C的存储器和指针
- c的指针*和引用&
- linux c/c++ a.out的由来
- c/c++--指针数组和数组指针的区别
- 指针变量和指针变量的地址(c/c++)
- C指针的指针
- c 指针的指针
- 详解c++[指针的指针] 和 [指针的引用]
- 指针的指针-----《C和指针》98页
- dp和px相互转换
- JavaEE之--------利用过滤器实现用户自动登录,安全登录,取消自动登录黑用户禁止登录
- 机器人动力学控制
- 关于onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
- 常用jar包作用
- C/C++指针的由来和功效
- windows下安装express失败
- MySQL 查询缓存
- MD5加密
- [强人工智能设计]一些系统设计上的思路
- 关于spring的IOC(二)
- 小波变换 与 傅里叶变换
- android之简单好用的本地生成验证码并进行验证
- iOS 图片圆角