C的存储类型与堆栈段
理解C的储存类型可以帮助理解JAVA等高级语言
auto存储类型
auto储存类型只对属于块的变量有效。auto具有自动储存期限,默认声明的。
static存储类型
static存储类型可用于全部变量
1. 用于块外部
(1)具有静态储存期限
(2)文件作用域
(3)内部链接
用于声明函数具有相同效果
另外:
声明不打算被其他文件调用的函数是,用static,有两点好处:
(1)更容易维护
修改程序的人可以知道对static函数修改不会影响其他文件
(2)减少了名字空间污染
可以在其他文件中重新使用这些函数的名字
2. 用于块内部
(1)具有静态储存期限
(2)块作用域
(3)无链接
extern存储类型
extern使几个源文件可以共享同一个变量(默认)
extern int i;
这样不会导致编译器为变量i分配存储单元,上述声明不是变量i的定义,它只是提示编译器需要访问定义在别处的变量。
1. 用于块外部
(1)具有静态储存期限
(2)文件作用域
2. 用于块内部
(1)具有静态储存期限
(2)块作用域
register存储类型
要求编译器把变量存储在寄存器中,少用
堆栈段
1.堆:堆是用于存放进程运行中被动态分配的内存段(自行管理)
像对象和C中的malloc等都是自主申请内存,自主管理释放
不可再访问到的内存块被称为垃圾,有垃圾的程序存在内存泄漏
2.栈:用于存放程序的局部变量,除此之外,函数被调用时,其参数也会被压入(内存申请与收回都由OS管理)
3.BBS段:用于存放程序中未初始化的全局变量,BBS段属于静态内存分配,体现为占位符,记录所需空间大小。
4.代码段:存放程序执行代码
5.数据段:存放已初始化的全局变量