【register/auto的比較分析】

#include <iostream>
using namespace std;
int main(){
int i,sum=0;
for(i=0;i<=100;i++)
sum+=i;
cout<<"The sum="<<sum<<endl;
}
#include <iostream>
using namespace std;
int main(){
register int i;
int sum=0;
for(i=0;i<=100;i++)
sum+=i;
cout<<"The sum="<<sum<<endl;
}
<span style="font-family: 'Times New Roman'; font-size: 18px; background-color: rgb(255, 255, 255);">前边程序中的int i是默认的自己主动变量(auto),以下  register int i是寄存器变量</span>



register/auto差别

自己主动变量在程序调用的时候是分配暂时的存储空间,调用的时候也是从内存中调用的。这也是和register最大的不同,register变量的值是存放在CPU中的寄存器中,调用时直接从寄存器中取出參加运算。存放在寄存器中的变量值调用须要的时间短。节省内从,如上面的简单程序用auto变量和register变量时没有多大差别的,在大型程序中这样的节约才干体现的出来。

register定义

为提高运行效率。C++语言同意将局部变量的值放在运算器中的寄存器里,须要时直接从寄存器中取出參加运算。不必再到内存中去存取。这样的变量叫做寄存器变量,用关键词register作说明为提高运行效率。C++语言同意将局部变量的值放在运算器中的寄存器里,须要时直接从寄存器中取出參加运算。不必再到内存中去存取,这样的变量叫做寄存器变量,用关键词register作说明。

【auto类型(普通)static局部变量有三点不同】

1. 存储空间分配不同,auto类型分配在栈上,属于动态存储类别,占动态存储区空间。函数调用结束后自己主动释放。而static分配在静态存储区,在程序整个执行期间都不释放。两者之间的作用域同样。但生存期不同。

2. static局部变量在所处模块的初次执行时进行初始化工作,且仅仅初始化一次。

3. 对于局部静态变量,假设不赋初值,编译期会自己主动赋初值0或空字符;而auto类型的初值是不确定的。(对于C++中的class对象例外,class的对象实例假设不初始化,则会自己主动调用默认构造函数。无论是否是static类型)

C++ auto 与 register、static keyword 浅析的更多相关文章

  1. auto, extern, register, static

    对于一个数据的定义,需要指定2中属性: 存储类型和数据类型: static int a; auto char c; register int d; 1 auto 2 extern 3 register ...

  2. 2、C语言关键字-auto register static

    文件限定符的作用: 1.auto : 局部变量,修饰的变量在栈中定义.动态内存,随着函数的结束,变量占用的内存空间也随之释放. 2.register : 寄存器变量,请求编译器将此变量存于cpu寄存器 ...

  3. extern、static、auto、register 定义变量的不同用法

    首先得说明什么叫“编译单元”.每个 .c 文件会被编译为一个 .o 文件,这个就是一个编译单元.最后所有的编译单元被链接起来,就是一个库或一个程序. 一个变量/函数,只要是在全局声明的,链接之后都隐含 ...

  4. auto和register关键字

    关键字概述 很多朋友看到这儿可能会有疑问,往往其它讲C语言的书籍都是从HelloWorld,数据类型开始C语言学习的,为什么我们要从C语言的关键字开始呢?关于这点,我有两点需要说明: 本章节面向的读者 ...

  5. C++中extern “C”含义及extern、static关键字浅析

    https://blog.csdn.net/bzhxuexi/article/details/31782445 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C ...

  6. objective-c: Functions and static keyword

    Functions function is a concept for C programming language, objective-c is entirely relies on C. To ...

  7. auto,register,static分析

    1.关键字auto auto是C语言中局部变量的默认类型,指明声明的变量在程序的栈上分配空间. 2.关键字static 指明变量的“静态”属性,局部变量存储在静态存储区: 文件作用标示符,只能在声明的 ...

  8. auto,register,static实例

    #include <stdio.h>int main() {    auto int i = 0;    register int j = 0;    static int k = 0;  ...

  9. C语言中auto,register,static,const,volatile的区别

    1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是aut ...

随机推荐

  1. 【分享】4412开发板POP烧写ubuntu出错,如何挂载emmc分区解决方法

    本文转自:http://bbs.topeetboard.com 平台:4412精英版系统:ubuntu系统 按照教程烧写ubuntu文件系统,TF卡和EMMC分区都完成(总之之前的操作试了几遍都是没问 ...

  2. Functor、Applicative 和 Monad x

    首先,我们来看一下 Functor typeclass 的定义: 1 2 class Functor f where fmap :: (a -> b) -> f a -> f b F ...

  3. 数据结构算法 - ConcurrentHashMap 源码解析

    五个线程同时往 HashMap 中 put 数据会发生什么? ConcurrentHashMap 是怎么保证线程安全的? 在分析 HashMap 源码时还遗留这两个问题,这次我们站在 Java 多线程 ...

  4. CV方向:纽劢科技,复星,蚂蚁金服,哈喽出行,海康威视

    以下均为CV方向实习面试,岗位算法工程师助理.时间均在2019年3月至4月之间. 纽劢科技(均电话):        技术2面,HR1面 复星(现场):                  技术只有1面 ...

  5. 【原创】DESTOON做中英双语言(多语言)切换版本具体详解

    第一次发原创好激动,该注意点什么? 在开发过程中用户有许多要求,比如这个多语言切换就是一个需求. 首先讲解一下DESTOON(DT)后台系统如何做这个中英.甚至多语言切换的这个功能. DT本身不自带多 ...

  6. 文件描述符 文件操作 <> open 文件句柄

    #! /usr/bin/perl use strict;use warnings; =head1print "\n---------------------------------test_ ...

  7. LAME的“命令行”

    VBR 编码 (强烈推荐) Alt Preset Extreme (平均256kbps) 我们有时在网上可以看到".LAME-APX." 就是这种形式,我们也可以在文件名中包含这个 ...

  8. ffmpeg处理网络流

    最近遇到好几个人在问ffmpeg如何处理网络流,刚好前段时间也在做这方面,抽空整理了下,把主要代码发出来,希望对大家有用.为简单处理,我这里只简单介绍UDP接收TS流,其实只要是socket接收的都可 ...

  9. BZOJ 3144 切糕 最小割

    题意: 一个矩阵,每个格子分配一个数,不同的数字,代价不同,要求相邻格子数字差小等于d 求最小代价. 分析: 我猜肯定有人看题目就想到最小割了,然后一看题面理科否决了自己的这个想法…… 没错,就是最小 ...

  10. squid正向代理使用

     环境: Squid Cache: Version 3.5.20 操作系统: centos7.6 squid安装配置 yum install -y squid systemctl  start  sq ...