存储类型

    xiaoxiao2021-03-25  200

    存储变量的地方:普通内存、运行时堆栈、硬件寄存器。

    变量的缺省存储类型取决于它的声明位置。凡是在任何代码之外声明的变量总是存存储于静态内存中,这类变量称为静态变量。静态变量在程序运行之前创建,在程序的整个执行期间都存在。代码内部声明的类型缺省的存储类型就是自动的,即存储于堆栈中,成为auto变量。如给auto变量加上static,则它会变成静态变量,但是它的作用域仍然是代码内而不是整个期间。关键字register可以用于自动变量的声明,提示它们存储于硬件寄存器中,但由于机器寄存器有限,所以它不能声明太多register类型变量,否则不能存储。

    在典型情况下,会把使用频率最高的变量声明为register变量,比如频繁访问的指针。

    有些机器不为寄存器指定地址,因为寄存器有限。同样,由于寄存器不断存储值,所以它的保存的值不一定相同。

    初始化时,静态变量的初始化不需要额外的开销,若未初始化,则它的默认值是0。

    自动变量的初始化需要很多额外的开销,因为当程序链接时还无法判断自动变量的存储位置。注意,自动变量没有缺省的初始值,因为在函数的每次调用之中它会处于不同的位置(自动的)。

    static关键字:当它用于函数定义时或者用于代码块之外的变量声明时,static用于修改标识符的链接属性,从external变为internal,但其作用域仍然未变,用这种方式声明的函数或者变量只能在声明它们的源文件中访问。

    当用于代码块内时,static用于修饰变量的存储类型,从自动变量变为静态变量,但其作用域仍然未变。用这种方式声明的变量在程序执行之前创建,并在程序的整个运行期间一直存在,而不是在每次代码开始执行时才创建执行完毕后销毁。

    转载请注明原文地址: https://ju.6miu.com/read-6332.html

    最新回复(0)