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