链接属性与储存类型的总结
来源:互联网 发布:中文翻译缅甸语言软件 编辑:程序博客网 时间:2024/05/16 10:23
一、链接属性
1、意义:标识符的链接属性决定如何处理在不同文件中出现的标识符。
2、分类:
链接属性分为external,internal,none。
a、对于none类型,其总是被当做单独个体,且该标识符的多个声明被当做独立的实体。
b、对于internal类型,在同一源文件内,所有声明都是同一个实体,但是属于不同源文件的声明被当做不同的实体。
c、对于external类型,无论声明多少次,位于多少个源文件,其均被当做同一个实体。
3、链接属性的extern与static
extern和static用于在声明中修改标识符的链接属性。
a、static:若某声明具有缺省的external链接属性,则在前面加上static可以使其的链接属性变为internal(static只对缺省链接属性为external的声明有效),但标识符的储 存类型和作用域不受影响。
b、extern:一般情况下,其为一个标识符指定external链接属性,以此访问其它位置定义的实体。(当extern用于源文件中某标识符的第一次声明才有效。如果位于标识符第 二次或之后的声明,则不会改变第一次声明指定的链接属性)
二、储存类型
1、意义:变量的储存类型是指存储变量值的内存类型。其决定变量何时创建,何时销毁,以及它将保存多长时间。而变量的缺省储存类型决定于其声明的位置。
2、分类:有三个储存变量的地方:普通内存,运行时堆栈,硬件寄存器。
a、静态变量:在任何代码块之外声明的变量,总储存于静态内存中,即不属于堆栈的内存,由static修饰。对于此类变量,无法指定其他存储类型。它在程序运行之前创 建, 在程序的整个执行期间始终存在。它保持原先的值,直到给它赋新值或程序结束。对于静态变量的初始化,因为其会缺省地初始化为0,所以我们可以
将想要初始化的值放在其会使用的位置。
b、自动变量:在代码块内部声明的变量的缺省储存类型是自动的,其位于堆栈中,由auto修饰。在程序执行到声明变量的代码块时,自动变量被创建。当程序离开代码块 时,自动变量被销毁。如果不对其进行显式的初始化,其值总是垃圾。
c、代码块内部的static:在代码块内部声明的变量,如果给它加上static,可使其储存类型从自动变为静态(函数的形参不能声明为静态,因为实参总在堆栈中传给函 数)。但变量的链接属性和作用域不会改变。
d、register:register可以用于声明自动变量,提示其储存于机器的硬件寄存器,而不是内存中。寄存器变量的创建与销毁同自动变量,但是,在使用寄存器变量的函数返回之前,必须恢复之前的寄存器的值以确保寄存器变量未损坏。而许多机器通过堆栈完成这一过程,因此可能反而会增加负担。
- 链接属性与储存类型的总结
- c语言变量的作用域,链接属性,储存类型&&static关键字
- C_作用域、链接属性和储存类型
- 链接属性与存储类型
- 作用域、链接属性和存储类型的总结
- 作用域、链接属性、存储类型总结
- 函数类型,变量的作用域与储存类型
- C语言:链接属性与存储类型
- 整数类型的储存
- Session 与 Cookies 储存内容的类型比较
- 链接属性 存储类型
- C 语言的储存类和链接
- c prime plus 的内存,储存,链接
- extern与static的链接属性分析
- extern与static的链接属性分析
- 链接属性和存储类型
- C-存储类型、初始化、链接属性的记录
- 变量的作用域、链接属性和存储类型
- Java中的移位操作——Java编程思想笔记
- poj 1743 后缀数组求最长不重叠重复子串
- DP专辑(转)进阶、分类
- ThreadLocal和同步锁机制的对比分析
- POJ1316-Self number
- 链接属性与储存类型的总结
- 管理线程之线程的ID
- ubuntu java
- 如何使用Chrome模拟手机浏览器测试移动端站点
- Java并发编程:可重入内置锁
- Leetcode--Longest Consecutive Sequence
- [cocoa]_[初级]_[打开文件选择对话框和保存文件对话框]
- 64位ubuntu下面提示Cannot run program adb的问题
- 杭电1025 Constructing Roads In JGShining's Kingdom