c高级 存储类、链接、内存管理
存储模型
对程序中数据存储空间的抽象。
静态存储,一直都在,直到程序完蛋;
动态,用就申请,搞完就甩了,例如函数形参那个悲惨的家伙,用完后,就没有然后了。
具体分类
auto 奥拓,不摆了;
register:暗示编译器要频繁使用,快,最好放在CPU寄存器中,但也是暗示,给不给也不一定。
全局变量不能暗示。
静态、空链接
与动态不同之处:
编译完后就分配储存空间了
静态默认自动初始化为0;动态默认不自动初始化,随机值。
静态变量区别:
静态局部变量:局部完成后,空间不释放,直到程序完了。且函数或者代码块之外的不能访问;
静态全局变量:全局使用,直到程序玩完。
-
- 因此,当调用一个函数且要求调用之前保留某些变量的值时,可以考虑静态局部
这里:当static用在不同变量上的效果不同哦:
*用在局部变量,延长寿命;* *用在全局变量,改变作用域;*
链接属性
组成一个程序的各个源文件分别被编译之后,所有目标文件以及函数库中的相同变量,如何区别?这就用到了链接属性;
空链接
即代码块或函数中的变量,作用域只是当前模块,不具有链接性的就是空链接啦。嘻嘻
内部关系:
static声明的全局变量,作用域为当前文件。文件内部随便搞。内部福利!嘻嘻
而static声明的局部变量,则是让它成为静态变量,延长生命咯,直到程序结束。
外部链接:
全局变量,默认的就是外部链接啦,除非加上了static变为静态全局。在外部的函数中使用前,使用extern一下就可以。大家一起搞。