C++ 存储方案
2013-08-28 23:23
190 查看
C++存储数据的三种不同方案
方案的区别就在于数据保留在内存中的时间。1.自动存储持续性。
在函数定义中声明的变量(包括函数的形参)的存储持续性为自动的。他们在程序开始执行其所属的函数或代码块时被创建。在执行完函数或代码块时,他们使用的内存被释放。
2.静态存储持续性
在函数定义外定义的变量和使用关键字static定义的变量的存储持续性都为静态。他们在程序的整个运行过程中都存在。C++有三种存储静态的变量。对于静态存储链接变量的数目在运行期间不会改变,但是内容可以改变。编译器分配固定的内存块来存储所有的静态变量。在整个程序的运行期间一直存在。
创建3种静态的持续变量:(1),外部链接的静态持续变量,必须在代码块的外面声明他(2),内部链接的静态持续变量,必须在代码块的外面声明他,并且用static限定符(3)无链接的静态持续变量,必须在代码块中声明,并使用static限定符。
例子:
.....
int global=100;//外链接静态变量
static int one_file=30;//内链接静态变量
int main()
{......}
void fun1(int n){
static int count =0;//无链接的静态变量
}
对于变量count来说,集市fun1()函数没有执行,count也留在内存中。global和one_file的作用域是整个文件,即在从声明位置到文件末尾的范围都可以使用。具体来说,可以再main(),fun1()中使用它们。有余One_file的链接为内部,因此只能在包含上述代码的文件中使用它。由于global的链接性为外部,因此可以再程序的其他文件中使用它。
所有的静态存储变量都有下面的两个初始化特征:
1,未被初始化的静态变量的所有位都被设置为0
2,只能使用常量表达式来初始化静态变量。
在多文件程序中,可以再一个文件且只能是在一个文件中定义一个外部变量。使用该变量的其他文件必须使用external才能使用该变量。
静态外部变量将隐藏常规的外部变量。
在默认情况下全局变量的连接性为外部的,但const全局变量的连接性为外部的。
3.动态存储持续性
用new操作符分配的内存将一直存在,知道使用delete操作符将其释放或程序结束为止。这种内存的存储持续性为动态,又是又称为自由存储。虽然存储方案概念不适用于动态内存,但适用于用来跟踪动态内存的自动和静态指针变量。例如,假设在一个函数中包括下面语句:
float *p_frees=new float[20];
由new分配的80个字节的内存将一直保留在内存中,直到使用delete操作符将其释放。但当包含该声明的函数结束时,p_fees指针将消失。如果希望另一个函数能够使用这80个字节中的内容,则必须将其地址传递或者返回给该函数。另一个方面,如果将p_frees的链接性声明为外部的,则文件中的位于该声明后面的所有函数都可以使用它。另外,通过在另一个文件中使用:
extern float * p_frees;可以使用这个文件中的指针。不过请注意,使用new来设置p_frees的语句必须位于函数中,这是因为只能使用常量表达式来初始化惊天存储变量:
float * p_frees;
int main(){p_frees=new float[10]
;.....}
相关文章推荐
- C++存储方案
- 引入名称空间之前C++变量和函数的存储方案及特点
- C++:数据的存储方案
- C++:静态成员函数,静态数据成员,成员函数存储方式
- 移动端本地存储方案
- opencv读取彩色/灰度图片像素值并存储在本地文件中c++代码实例及运行结果
- android sdcard存储方案(基于wrapfs文件系统)
- 架构设计:系统存储(11)——MySQL主从方案业务连接透明化(上)
- 探寻C++最快的读取文件的方案
- android sdcard存储方案(基于wrapfs文件系统)
- C/C++语言程序的存储区域
- 无向图的深度优先搜索(采用邻接表存储)C++实现
- 探寻C++最快的读取文件的方案
- 线性表链式存储结构的C++模板类程序源代码
- 中小企业存储方案
- Visual C++.NET GDI+编程基础方案
- Linux下C++开发工具CodeBlocks安装技术方案
- 密码存储中MD5的安全问题与替代方案
- c++变量的存储类型
- C和C++的存储模式