现在的位置: 首页 > 综合 > 正文

c++中的存储类型

2013年08月01日 ⁄ 综合 ⁄ 共 1272字 ⁄ 字号 评论关闭

c++中的存储类型

存储类型是从变量的存在时间(即生存期)来划分变量。变量的存储类型可分为静态存储方式和动态存储方式。对于动态存储变量,当程序运行到该变量处时才为其分配存储空间,当程序运行到该变量所在作用域的结束处时自动收回为其分配的存储空间,因此它的生存期为所在作用域。

在程序开始就执行就为其分配存储空间,直到程序结束时,才收回变量的存储空间,这种变量称为静态存储空间,其生命周期为整个程序执行的过程。

在c++中,变量的存储类型分为:自动类型,寄存器类型,静态类型,外部类型。

1 自动类型auto

只能是局部类型的变量。属于动态存储类型。该说明符说明定义的是局部变量,但是局部变量默认的存储类型是auto,所以很少使用该说明符;

2静态存储变量 static

static——静态变量,static 数据类型 变量名=初值;可声明全局或者局部静态变量,当声明为全局静态变量时,全局静态变量只能供本模块使用,不能被其他模块再声明为extern变量;当一个局部变量声明为static时它既有局部变量的性质:只能在函数体局部存取,又有全局变量的性质:函数多次进入,变量只初始化一次。因此静态局部变量实质是一个供函数局部存取的全局变量

3 寄存器类型变量 register

动态分配方式,编译器不为寄存器类型的变量分配内存空间,而是直接使用cpu的寄存器。该说明符在定义变量时说明此变量存储在cpu的寄存器中,以加快存取速度。一般编译器自己选择几个变量采用寄存器存储,不需要在程序中声明。(换句话说,即便你声明了也不一定会载入寄存器,编译器根据整体优化自身选择)。

4 外部类型变量 extern

由于一个完整的程序可能很大,分成多个模块,放在不同的文件中,分开编译成目标文件,最后进行链接,对于所有模块使用的全局变量,如果在所有模块中定义,在链接时就会出错,解决办法是:只在一个模块中定义全局变量,在其他模块中用extern说明这是一个“外来”的全局变量;格式:extern 数据类型 标示符(变量名或者函数原型);注意该声明不是定义变量,只是将一个已经存在的变量函数声明为extern变量函数,故不能进行赋初值操作;不管声明多少次还是那个原先定义的全局变量;

exter还允许使用其他语言定义的函数和过程,但是必须是该编译工具支持的c++中通过使用如下格式,允许c++程序员使用在c中定义的函数和变量等。(This allows you to use functions or variables defined in a C module.)

DE>// Example of the extern keyword
extern "C" int printf( const char *, ... );

extern "C"
{
   int getchar( void );
   int putchar( int );
}DE>

 

内存存储

当程序准备运行时,操作系统会为程序分配一块内存空间,c++程序的内存通常被分为4个区:

全局数据区——全局变量、静态变量、字符串常量

代码区——函数和代码

栈区——为运行函数分配的函数参数、局部变量、返回地址

堆区——动态内存分配

 

【上篇】
【下篇】

抱歉!评论已关闭.