如何区分C++中的自动存储、静态存储和动态存储

本文深入探讨了C++中三种主要的数据内存管理方式:自动存储、静态存储和动态存储。详细解释了每种方式的特点及应用场景,特别是new和delete操作符在动态存储中的灵活运用,帮助读者理解内存管理的核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中有3种管理数据内存的方式:自动存储、静态存储和动态存储(有时叫做自由存储空间和堆)

1、自动存储

在函数内部定义的常规变量使用自动存储空间,被称为自动变量这意味着他们所属的函数被调用时自动产

生,在函数结束时消亡,如下面程序中的temp数组,当且仅当temp数据活动时存在。当程序控制权回到main时

temp使用的内存将被自动释放。如果getname()返回的是temp的地址,在main中temp的地址将很快得到重新

使用。

2、静态存储

静态存储是整个程序执行期间都存在的存储方式。使变量成为静态变量的方式有两种,一种是在函数外面定义它,另外一种是使用关键字static: static double fee = 56.50;

3、动态存储

new和delete 操作符提供了一种比自动变量和静态变量更灵活的方式。他们管理一个内存池,这在C++中被称为自由存储空间。内存池同用于静态变量和自动变量的内存是分开的。下面的程序可以表明new和delete允许在一个函数中分配内存,而在另外一个函数中是释放它。因此数据的生命周期就不完全受到程序或者函数的生存时间的控制。与使用常规变量相比,使用new和delete使程序员对程序如何使用内存有更大的把握空间。

//delete.cpp --using the delete operator
#include<iostream>
#include<cstring>
using namespace std;
char * getname(void);
int main()
{
	char * name;
	name = getname();
	cout << name <<" at " <<(int *)name <<"\n";
	delete [] name;
	
	name = getname();
	cout << name << " at " <<(int *)name <<"\n";
	delete [] name;
	return 0;
 } 
 
 char *getname()
 {
 	char temp[80];
 	cout <<" Enter last name: ";
 	cin >> temp;
	 
	 char *pn = new char[strlen(temp)+1];
	 strcpy(pn,temp);
	 
	 return pn; 
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值