C语言关于存储的基础知识

一、综述:

用于存储程序数据的内存可用存储期、作用域和链接来表征。

二、存储期:

存储期可以是静态的、自动的、或者分配的。

1)如果是静态的,内存在程序开始执行时被分配,并在程序运行时一直存在。

2)如果是自动的,变量所用内存在程序执行到该变量定义所在代码块时开始

分配,在退出代码块是释放。

3)如果是分配的内存,内存通过调用malloc()或calloc()函数分配,通过

调用函数free()释放。

三、作用域:

作用域决定了哪一部分程序可以访问某个数据。

1)在所有函数之外定义的变量具有文件作用域,并对该变量声明之后定义的

全部函数可见。

2)在代码块内定义或者作为函数参量定义的变量具有代码块作用域,并只在

该代码块及其子代码块中可见。

四、链接属性:

链接描述了程序的某个单元定义的变量可被链接到其他哪些地方。

1)具有代码块作用域的变量作为局部变量,具有空链接。

2)具有文件作用域的变量可有内部链接或外部链接

       1、内部链接意味着变量只可在包含变量定义的文件内部使用。

       2、外部链接意味着变量也可在其他文件中使用。

五、存储类:

1)自动——在代码块内(或在一个函数头部作为参量),无论有没有存储类

修饰符auto,都属于自动存储类。该类具有自动存储时期、代码块作用域和

空链接。如未经初始化,它的值是不定的(随机值)。

2)寄存器——在代码块内(或在一个函数头部作为参量)使用存储类修饰符

register声明的变量属于寄存器存储类。该类具有自动存储时期、代码块作用

域和空链接,并且无法获得它的地址

3)静态、空链接——在一个代码块内使用存储类修饰符static声明的变量属

于静态空链接存储类。该类具有静态存储时期、代码块作用域和空链接

仅在编译时初始化一次。如未明确初始化,它的字节都被设定为0

4)静态、外部链接——在所有函数外部定义、未使用存储类修饰符static

变量属于静态、外部链接存储类。该类具有静态存储时期、文件作用域和外

部链接,仅在编译时初始化一次。如未明确初始化,它的字节都被设定为0

5)静态、内部链接——在所有函数外部定义、使用存储类修饰符static的变

量属于静态、外部链接存储类。该类具有静态存储期、文件作用域和内部链

,仅在编译时初始化一次。如未明确初始化,它的字节都被设定为0

6)分配内存——使用函数malloc()(或相关的函数)提供的内存,该函数

返回一个指向具有具有所请求字节数的内存块的指针。将这内存块的地址作

为参数来调用函数free(),

可以是该内存块重新可用。

六、类型限定词:

类型限定词说明符有constvolatilerestrict

1)说明符const将数据限定为不变的。在使用指针时,const可以表明指针本

身不变或指针指向的数据不变,这取决于const在声明中的位置。

2)说明符volatile表明数据除了可被程序修改外还可通过其他地方修改,其

目的是警示编译器在优化时不要做出相反的假设。

3)说明符restrict也是为了优化而设置。由restrict限定的指针被认为是提供

了对其所指向的数据块的唯一访问途径。

猜你喜欢

转载自blog.csdn.net/m0_38121874/article/details/72809237