zoukankan      html  css  js  c++  java
  • C++笔记010:C++对C的扩展——register关键字增强


    原创笔记,转载请注明出处!

    点击【关注】,关注也是一种美德~


    register关键字:请求编译器让变量直接放到CPU内部寄存器里面,而不是通过内存寻址访问,速度快。

    在C语言中,register修饰的变量不能取地址,去寄存器变量的地址在C语言里面是会出错的。

    int main()

    {

    register int a=0;

    printf("&a=%x ",&a);

     

    return 0;

    }

    编译报错!

     

    同样的代码我们放到C++编译环境下,发现编译是通过的!

    #include<iostream>

    using namespace std;

     

    int main()

    {

    register int a=0;

    printf("&a=%x ",&a);

     

    system("pause");

    return 0;

    }

    运行结果:

    &a=45fa78

    请按任意键继续...

     

    在C++中依然支持register关键字,C++编译器有自己的优化方式,不使用register也可能做优化;并且C++中可以取得register变量的地址,C++编译器发现程序中需要取register变量的地址时,register对变量的声明变的无效。早期的C语言编译器不会对代码进行优化,因此register变量是个很好的补充。

    我们说一下C++编译器的优化方式:

    #include<iostream>

    using namespace std;

     

    int main()

    {

    register int a=0;

    printf("&a=%x ",&a);

     

    for(int i=0;i<1000;i++)

    {

    printf("i:%d ",i);

    }

     

    system("pause");

    return 0;

    }

     

    像for循环这种频繁使用i的地方,C++编译器会做优化,将变量i放到寄存器里面,加快程序的执行速度。也就是C++即使不用关键字register也会优化。


     原创笔记,转载请注明出处!

     更多精彩请关注微信公众号:依法编程


     

  • 相关阅读:
    ABAP 动态内表构建 Dynamic internal table
    RFC权限分配
    ERP从业来的总结
    WORD中插入VISIO图形,打印乱码解决
    SAP中程序间的相互调用,SUBMIT关键字的用法
    SDva01的屏幕增强
    STL中的binder
    C++中的new
    C++数组中多态问题分析
    Gdiplus中实现双Buffer绘图
  • 原文地址:https://www.cnblogs.com/tyyhmtyyhm/p/8971925.html
Copyright © 2011-2022 走看看