储存类生命周期链接属性作用域总结

储存类:变量在定义时的储存类型对其在程序中的生命周期、连接属性及作用域有很大的关联
链接属性: 无连接、内连接、外链接
关键字:
1、auto    用于修饰局部变量,在定义局部变量时,将其定义在栈上。
普通局部变量存放在栈上,因为栈内存的特性决定了普通局部变量定时如果未初始化其的值是随机的,因为栈内存是脏的,变量在释放后并未对其初始化,且栈内存被广泛运用,也就造就了普通变量的特性。
普通局部变量的生命周期是临时,可从其存放于栈上看出其临时的特性。
普通局部变量的作用域为代码块中“{}",C89与C99略有不同,普通局部变量在代码块的首部被定义,在代码块中被运用,在代码块结尾处被释放。

2、static    该关键字有两种作用,1、用于修饰静态局部变量 2、用于修饰全局变量或者函数,
且这两种作用之间无任何的相关性,相互独立的存在。
static修饰的局部变量为静态局部变量,其与普通局部变量不同,并不存放在栈上,而是存放在数据段/bss段(显式初始化为非0则在数据段,显式初始化为0或未显示初始化则在bss段)上,同样的因其存放在数据段上也就决定了其的生命周期并不是临时的而是永久的。但静态局部变量与普通局部变量也存在相似性,静态局部变量的作用域仍为代码块,且其连接属性依旧为无连接。
static修饰的全部变量/函数为静态全局变量/函数,其作用域的文件范围,生命周期为永久,连接属性因其只能在自身的文件内部被调用所以连接属性为内连接。

3、register  该关键字修饰的变量分配于寄存器中,降存放于寄存器中的变量可大大提高读取速度,但寄存器是有限的,
且经常性的被系统本身使用,故谨慎使用该关键字。

4、extern  该关键字用来全局声明变量/函数,声明后的全局变量及函数可在别的文件中被调用(前提是包含了该文件的.h文件),
作用域变更为全文件,链接属性为外链接。

5、volatile 其意思为可变的,在C语言中定义变量时加上该关键字,即可告诉编译器该变量可被编译器以外的代码改变,编译器之内的意思是变量的值的改变是代码的作用,编译器之外的改变就是这个改变不是代码造成的,或者不是当前代码造成的,编译器在编译当前代码时无法预知。譬如在中断中对变量的操作就必须加上该关键字,防止编译器对代码进行了错误的优化。

6、restrict  restrict只用来修饰指针,不能修饰普通变量。

7、typedef

存储类决定生命周期,作用域决定链接属性
宏和inline函数的链接属性为无连接。

时间: 2024-08-08 05:21:47

储存类生命周期链接属性作用域总结的相关文章

(转)JVM类生命周期概述:加载时机与加载过程

原文地址: http://blog.csdn.net/justloveyou_/article/details/72466105 JVM类加载机制主要包括两个问题:类加载的时机与步骤 和 类加载的方式.本文主要阐述了第一个问题,关于类加载的方式等方面的内容,包括JVM预定义的类加载器.双亲委派模型等知识点, 一个Java对象的创建过程往往包括两个阶段:类初始化阶段 和 类实例化阶段. 注意,本文内容是以HotSpot虚拟机为基准的. 一.类加载机制概述 我们知道,一个.java文件在编译后会形成

JVM类生命周期概述:加载时机与加载过程

一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用.事实上,虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程就是虚拟机的类加载机制.本文概述了JVM加载类的时机和生命周期,并结合典型案例重点介绍了类的初始化过程,进而了解JVM类加载机制. 一.类加载机制概述 我们知道,一个.java文件在编译后会形成相应的一个

iOS对UIViewController生命周期和属性方法的解析

目录[-] iOS对UIViewController生命周期和属性方法的解析 一.引言 二.UIViewController的生命周期 三.从storyBoard加载UIViewController实例的传值陷阱 四.UIViewController与StroyBoard的相关相互方法 1.ViewController直接在StoryBoard中进行跳转的传值 2.使用代码跳转Storyboard中的controller 五.UIViewController之间的一些从属关系 1.parentV

【iOS开发】iOS对UIViewController生命周期和属性方法的解析

iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有条有理的展示在我们的View层上.iOS中的UIViewController是UIKit框架中最基本的一个类.从第一个UI视图到复杂完整项目,都离不开UIViewController作为基础.基于UIViewController的封装和扩展,也能够出色的完成各种复杂界面逻辑.这篇博客,旨在讨论UIV

vue 524 (生命周期 计算属性 监听)

每个 Vue 实例在被创建时都要经过一系列的初始化过程--例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会. 依据上表可以确定各个位置的先后触发顺序 //  关于计算属性: vue改变或获取一个内部方法有以下两种种. 1.在vue对象中 以  methods:{}模式定义各类成员方法: 例如(js  vue对象定义内): methods:{ FF1(){return

06Hibernate实体类生命周期

前言:Session接口是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的增删查改方法,而且Session具有一个缓存它是Hibernate的一级缓存.站在持久化层的角度,Hibernate把实体类分为4种状态:持久化状态.临时状态.游离状态和删除状态.本文将会介绍Hibernate这些机制的细节以及使用方法. 1.Hibernate的Session缓存 (1)Session缓存的作用 使用Session的缓存有三大作用: 减少访问数据库的频率,当Session的get()

React Native组件、生命周期及属性传值props详解

创建组件的三种方式 第一种:通过ES6的方式创建 /** * 方式一 :ES6 */ export default class HelloComponent extends Component { render (){ return <Text style={{fontSize:20,backgroundColor:'red'}}>Hello</Text> } } 第二种:通过ES5的方式创建 /** * 方式二:ES5 */ var HelloComponent= React.c

Spring注解 - 生命周期、属性赋值、自动装配

一.Bean的生命周期 流程 Bean创建 -- 初始化 -- 销毁 创建: 单实例:在容器启动时创建对象 多实例:每次调用时创建对象 初始化: 都是在对象创建完成后,调用初始化方法 销毁: 单实例:容器关闭时,调用销毁方法 多实例:容器不会管理这个bean,只能手动调用销毁方法 实现方式 在 @Bean 注解上指定初始化(initMethod).销毁方法(destroyMethod) @Bean(initMethod = "init", destroyMethod = "d

java 静态变量生命周期(类生命周期)

Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 销毁:类被卸载时,静态变量被销毁,并释放内存空间.static变量的生命周期取决于类的生命周期 类初始化顺序: 静态变量.静态代码块初始化 构造函数 自定义构造函数 结论:想要用static存一个变量,使得下次程序运行时还能使用上次的值是不可行的.因为静态变量生命周期虽然长(就是类的生命周期),但是当程序执行完,也就是该类的所有对象都已经