• 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也会优化。


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

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


     

  • 相关阅读:
    命令别名
    文件的元数据
    bash命令练习
    bash的使用
    Linux系统下的文件管理类常命令及使用方式
    Linux获取命令帮助、man文档章节的划分
    Linux目录名、命名规则及功能规定
    Linux命令使用格式
    springmvc 异常处理
    oracle 笔记一
  • 原文地址:https://www.cnblogs.com/tyyhmtyyhm/p/8971925.html
Copyright © 2020-2023  润新知