龙空技术网

C语言存储类型——static&auto

linux编程爱好者 184

前言:

今天大家对“c语言的存储类型有哪些特点”大约比较关注,看官们都想要分析一些“c语言的存储类型有哪些特点”的相关内容。那么小编也在网上收集了一些有关“c语言的存储类型有哪些特点””的相关知识,希望小伙伴们能喜欢,朋友们一起来了解一下吧!

变量的存储类型指存储变量值的内存类型。变量的存储类型决定变量何时创建、销毁及变量值保持时长。内存中可以用于存储变量的地方:普通内存、运行时的堆栈、硬件寄存器。

变量的default存储类型取决于它的声明位置。

1. 在代码块外声明的变量存储于静态内存中,作为全局变量,为方便维护规定全家变量声明为g_***。静态变量在程序运行前创建,在程序的整个执行期间始终存在。

2. 在代码块内部声明的变量default存储类型是自动的(automatic),它存储于栈中。使用malloc or calloc申请的buff存储于堆中。需要使用free释放。auto用于修饰自动变量。代码块中的变量在default下就是自动变量。在程序执行到声明自动变量的代码块时,自动变量被创建,程序离开代码块,自动变量自行销毁。

在代码块内部声明的变量,前面加上static,可使它的存储类型由自动变量变为静态。具有静态存储类型的变量在整个程序执行过程中一直存在。注意:修改变量的存储类型并不修改变量的作用域,它仍然只能在该代码块内部按名字访问。函数形参不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归。

3. 关键字register可以用于自动变量的声明。提示他们以供存储于机械的硬件寄存器而不是内存中。通常,寄存器变量比存储于内存的变量访问起来效率更高。

总结:

static关键字的作用

static主要定义全局静态变量,局部静态变量,静态函数。

全局静态变量:

1,全局区分配内存;

2,如果没有初始化,默认是0;

3,变量在本文件内从定义开始到文件结束可见;

局部静态变量:

1,全局区分配内存;

2,驻留在全局数据区,直到程序运行结束;

3,作用域为局部作用域,当定义它的函数或语句块结束时,

作用域随之消失;

定义静态函数

在函数返回值类型前加static,

1,静态函数只能在本源文件中使用;

2,在文件作用域中声明inline函数默认为static函数;

堆和栈的区别

1,申请方式不同,栈由系统自动分配,堆时人为申请开辟;

2,申请大小的不同,栈获得的空间较小,堆获得的空间较大;

3,申请效率不同,栈由系统自动分配,速度快,堆的速度比较慢;

4,存储内容的不同。栈在函数调用时,函数调用语句的下一条执行

语句的地址第一个进栈,然后参数进栈,静态变量不入栈。

而堆一般是用一个字节存放堆的大小,堆中内容人为安排;

5.底层不同。栈是连续的空间,堆是不连续的空间。

标签: #c语言的存储类型有哪些特点