C语言内存分四个区:静态区,代码区,堆区,栈区
like:
- 函数名存储了函数代码二进制段入口点的地址。
- 指针变量在栈区,它指向的内存是堆区,栈区是由系统管理的,不需要手动释放,堆区需要手动释放。
- 寄存器变量不在内存的四个区,在CPU内部。
- 栈区,堆区都是动态存储区,栈区调用的时候分配,用完的时候回收再次分配;堆区,自己自由分配,自己决定何时分配何时回收;代码区和静态区就一直与程序共存亡。
- 可见域就是实际上可以作用的区域,作用域是理论上可以作用的区域,某些实际场合,需要增加声明才可以访问。
- 寄存器变量和自动变量必须放在函数内部,外部就会报错。全局变量的定义必须放在函数外部,全局变量的声明,拖长全局变量的可见域。
- Static即可以放在函数内部,也可以放在函数外部,内部是静态局部变量,外部是静态全局变量。作为函数参数也可以。它限定作用域为当前C文件。而全局变量当前的工程任何一个C文件都可以调用。
- 内部函数是加了Static,他的作用域只是当前C文件。外部函数的作用域是整个源程序的所有源文件。
- 不同源文件可以有同名结构体类型,相同源文件,不可以有同名结构体类型。
局部变量和全局变量,其中auto、register和静态局部变量属于局部变量;
extern和静态全局变量属于全局变量。
需要注意的是:
全局变量可以被其他C文件引用。
静态全局变量只能被本格C文件所引用。