【有书共读】c primer plus 12
内存用于存储程序中的数据, 由存储期、作用域和链接表征。 存储期可以是静态的,自动的或动态分配的。如果是静态存储期,在程序开始执行时分配内存,并在程序运行时都存在。如果是自动存储期,在程序进入变量定义 所在块时分配变量的内存,在程序离开块时释放内存。 如果是动态分配存储期,在调用malloc() (相关函数)时分配内存,在调用free()函数时释放内存。
作用域决定定程序的哪些都分可以访问某数据。定义在所有函数之外的变量具有文件作用域,对于该变量申明之后所有的函数可见,定义在块或作为函数形参内的变量具有块作用域,只对该块以及它包含的嵌套块可见。
链接描述定义在程序某翻译单元中的变量可被链接的程度。具有块作用域的变量是局部变量,无链接。具有文件作用域的变量可以是内部链接或者外部链接。内部链接意味着只有其定义所在的文件才能够使用改变量,外部链接意味着其它文件也可以使用该变量。
下面是c的5种存储类别(不包括线程的概念)
自动——在块中不带存储类别或者带auto存储类别的说明符声明的变量(或者作为函数头中的形参)属于自动存储类别,具有自动存储期,块作用域,无链接。如果未初始化自动变量,它的值也是未定义的
寄存器——在块中带register存储类别说明符的变量(或者作为函数函数头中中的形参)属于寄存储器类别。
静态,无链接——在块中带static存储类别说明符的变量属于静态无链接的存储类别。
静态外部链接——在所有函数外部并且没有使用static存储类别的说明符声明的变量数组静态外部链接。
静态内部链接——在所有函数外部且使用了static存储类别说明符声明的变量属于静态,内部链接存储内部。