远程学习和教育的概念。在线教程和视频课程,研究和毕业,科学研讨会,数字网络学习,测试和文学
内存用于存储程序中的数据,由存储期、作用域和链接表征。存储期可以是静态的、自动的或动态分配的。如果是静态存储期,在程序开始执行时分配内存,并在程序运行时都存在。如果是自动存储期,在程序进入变量定义所在块时分配变量的内存,在程序离开块时释放内存。
如果是动态分配存储期,在调用malloc()(或相关函数)时分配内存,在调用free()函数时释放内存。作用域决定程序的哪些部分可以访问某数据。定义在所有函数之外的变量具有文件作用域,对位于该变量声明之后的所有函数可见。
定义在块或作为函数形参内的变量具有块作用域,只对该块以及它包含的嵌套块可见。链接描述定义在程序某翻译单元中的变量可被链接的程度。具有块作用域的变量是局部变量,无链接。具有文件作用域的变量可以是内部链接或外部链接。内部链接意味着只有其定义所在的文件才能使用该变量。外部链接意味着其他文件使用也可以使用该变量。下面是C的5种存储类别(不包括线程的概念)。
下面是C的5种存储类别(不包括线程的概念)。
自动:在块中不带存储类别说明符或带auto存储类别说明符声明的变量(或作为函数头中的形参)属于自动存储类别,具有自动存储期、块作用域、无链接。如果未初始化自动变量,它的值是未定义的。
寄存器——在块中带register存储类别说明符声明的变量(或作为函数头中的形参)属于寄存器存储类别,具有自动存储期、块作用域、无链接,且无法获取其地址。把一个变量声明为寄存器变量即请求编译器将其存储到访问速度最快的区域。如果未初始化寄存器变量,它的值是未定义的。
静态、无链接——在块中带static存储类别说明符声明的变量属于“静态、无链接”存储类别,具有静态存储期、块作用域、无链接。只在编译时被初始化一次。如果未显式初始化,它的字节都被设置为0。
静态、外部链接——在所有函数外部且没有使用static存储类别说明符声明的变量属于“静态、外部链接”存储类别,具有静态存储期、文件作用域、外部链接。只能在编译器被初始化一次。如果未显式初始化,它的字节都被设置为0。
静态、内部链接——在所有函数外部且使用了static存储类别说明符声明的变量属于“静态、内部链接”存储类别,具有静态存储期、文件作用域、内部链接。只能在编译器被初始化一次。如果未显式初始化,它的字节都被设置为0。
动态分配的内存由malloc()(或相关)函数分配,该函数返回一个指向指定字节数内存块的指针。这块内存被free()函数释放后便可重复使用,free()函数以该内存块的地址作为参数。
类型限定符const、volatile、restrict和_Atomic。const限定符限定数据在程序运行时不能改变。对指针使用const时,可限定指针本身不能改变或指针指向的数据不能改变,这取决于const在指针声明中的位置。volatile限定符表明,限定的数据除了被当前程序修改外还可以被其他进程修改。该限定符的目的是警告编译器不要进行假定的优化。restrict限定符也是为了方便编译器设置优化方案。restrict限定的指针是访问它所指向数据的唯一途径。