C++堆和栈

本文介绍了C++中栈和堆的内存分配,包括如何在栈和堆上创建变量,以及栈和堆的区别。栈内存分配速度快,自动回收,适合局部变量;堆内存分配较慢,需要手动回收,适用于全局变量。为数组分配值时,通过索引进行操作。理解并正确使用栈和堆有助于提升程序性能。

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

1.简介
堆heap 栈stack是RAM(random access memory)中的两个区域
栈一般有固定值
堆一般则会有默认值default,但是可以增长

那么我们将如何在C++中可以控制性的进行堆或栈的内存分配(memory allocation)呢?比如怎么在堆空间中为某个变量分配内存或者栈空间?

struct Vector
{
	float x, y, z;
};
int main()
{
	//stack
	int value = 10;
	int array[5];
	Vector myvector;

	//heap
	int* pvalue = new int;
	*pvalue = 10;
	int* parray = new int[5];
	Vector* pvector = new Vector();

	return 0;
}

2.栈内存初步解释
接下俩为刚才的栈上数组分配数值,不分配array就会是ccccc

int array[5];
	array[0] = 1;
	array[1] = 2;
	array[2] = 3;
	array[3] = 4;
	array[4] = 5;

对其进行赋值的过程仅仅是&array向右移动(地址值加)多少个字节数。
i.e:array[2]就是&array向右移动了8个字节,原因在于: &array=&array[0],并且一个int占四个字节

仅仅是数组的地址发生移动进而为每个int进行操作,地址就是“索引”,借助索引来进行所有的操作

3.堆内存初步解释
同上,只是位置不同

4.回收内存
4.1栈回收内存是自动的,只要超出了这个变量的作用范围,编译器会自动回收。
比如在if/for语句中的声明定义的变量,一旦结束会自动回收
4.2堆中内存则必须要手动回收。
使用delete关键词

    delete pvalue;
	delete[] parray;//注意要delete[],否则仅仅是删除数组指针对应的堆空间,而没有删除数组内部的空间
	delete pvector;

5.区别
在栈上分配内存的速度快于堆
因为堆使用new总是会调用malloc,而且会判断系统剩余内存是否多余所申请的内存等等过程
而这些过程栈空间申请都不需要,因此栈空间更快,性能更好。

而在堆上进行delete操作时,也会进行复杂(相比较栈)的过程,也会损失性能。

结论:如果可以尽可能使用栈空间,尤其是在局部变量,这样会大大增强程序的性能。但是如果有些全局变量则最好使用堆空间,毕竟栈空间有一定的生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值