C储存类,链接和内存管理学习总结和心得
来源:互联网 发布:淘宝购车靠谱吗 编辑:程序博客网 时间:2024/06/03 19:47
C有5种储存类:自动,寄存器,具有外部链接的静态,具有内部链接的静态和具有空链接的静态。
储存类 时期 作用域 链接 声明方式
自动 自动 代码块 空 代码块内
寄存器 自动 代码块 空 代码块内,使用关键字register
具有外部链接的静态 静态 文件 外部 所有函数之外
具有内部链接的静态 静态 文件 内部 所有函数之外,使用关键字static
空链接的静态 静态 文件 空 代码块内,使用关键字static
解释一些关键字:
aotu类型表示该变量的存在时间由函数调用决定,且定义变量时默认使用aotu类型
extern关键字声明表示该变量由外部声明定义,且在此处引用,若引用其他文件定义的变量则必须要使用extern关键字
static表示该变量是静态的,即与整个程序的生存周期相同,同时,static型的变量在编译程序之前进行编译,即除了#提示的预编译内容外,static内容编译的优先级最高,这样造成的特性就是在程序中被static提示的内容不会被重复定义声明,这在函数的递归中很重要。
register表示该变量被放置在寄存器或者较快的内存中,这样的变量可以对程序的运行速度造成一定的优化,然而由于寄存器的特殊性,被该关键字标注的变量无法获得其地址,所以不能对其使用指针(即使该变量被放在了内存中)。
const不做解释。。。。。。。
volatile告诉编译器这是一个易变的变量,即可能被除了用户运行的程序之外的代理所更改,这类变量由于可能会在一些未知的情况下被修改,所以如果对其进行运行优化会产生错误的计算结果,如硬件的时钟等。反过来,非volatile变量即代表该变量的所有调用和变化都被程序所监控,因此编译器可以对其进行适当的计算优化。
restricted只可被用于指针,并表明指针是放弃一个数据对象的唯一且初始的方式,从结果上来说,这样的限定可以使程序的运行更加安全,但可能会使程序的编写变得更加麻烦。
c中还有一个不太常用的作用域被称为函数作用域,这些标记与goto联用,作为跳转的标记,不过由于goto的危害性,这个作用域的存在感如同阿卡林一般............
写一些总结:
没有在代码块内定义而具有全局作用域的储存类或声明方式
c程序编译的顺序:预编译->main外部声明和static变量->main
extern更像是链接的关键字,而不是声明,准确的说extern其实是引用声明的关键字。
向函数传递数据的方法不仅可以使用传值调用,也可以用全局变量,尽管这种方式并不推荐
在多文件编译中,使用static关键字修饰变量,使变量在编译main前完成定义声明,这样就可以不用担心多文件中的重复声明了。
使用全局变量会造成不必要的风险,因为全局变量会被各个函数所修改,所以使用全局变量时最好使用const关键字修饰,使其变为常量。不过既然这么麻烦为什么不用define?
Malloc()和free()是c进行内存管理的基础,也是c的高级数据结构的基础,如链表等。与malloc相似的还有calloc(),其实并没有什么太大的区别,除了自动进行了元素初始化。只是多了这么一个功能就要多写一个库函数.........不嫌麻烦么............
多样性的储存类使c优化一个程序的方法变得十分丰富,不过既然c现在只是用来写底层的东西,那有必要计较这一点运行速度吗.............
- C储存类,链接和内存管理学习总结和心得
- 储存类别、链接和内存管理
- C语言存储类、链接和内存管理总结
- C Primer Plus 第十二章:储存类别,链接和内存管理
- C 语言的储存类和链接
- C -- 存储类、链接和内存管理
- 第十二章 存储类,链接和内存管理 总结 1406015
- C语言学习笔记1——存储类、链接和内存管理
- C学习笔记(八)存储类、链接和内存管理
- C中的存储类、链接和内存管理
- 存储类,链接和内存管理
- 存储类、链接和内存管理复习
- 存储类、链接和内存管理
- 存储类,链接和内存管理
- 存储类、链接和内存管理
- 存储类、链接和内存管理
- 存储类、链接和内存管理
- c prime plus 的内存,储存,链接
- linux解压命令
- 河南第六届ACM省赛(Card Trick)
- hibernate异常(2)
- VIM 配置
- PAT-1054
- C储存类,链接和内存管理学习总结和心得
- Docker问题
- socket编程 -- 基于TCP协议的C/S通信模型及实现
- leetcode:Longest Valid Parentheses
- 【高斯消元】[JSOI2008][HYSBZ/BZOJ1013]球形空间产生器sphere
- Eclipse快捷键
- **LeetCode 30. Substring with Concatenation of All Words
- Maven: 每次更新Maven Project ,JAVA 版本都变为1.5
- 在腾讯的第三堂产品课——爆品的秘密 梁宁-闲花照水录