C语言静态内存分配与动态内存分配

C语言中,内存主要分为5个区,分别为栈区堆区全局/静态存储区常量存储区代码区
其中代码区存放源程序的二进制代码,其余四个区都存储进程运行过程中需要的存储的变量。

变量的内存分配有两种:静态与动态。
静态内存分配在编译时就对变量分配空间,而动态内存分配直到程序运行时再进行分配。
使用静态内存分配的变量有:全局变量和静态变量。
全局变量是直接在程序中定义而非在函数(包括main函数)中定义的变量。
静态变量在定义时使用static修饰,静态变量又分为全局静态变量和局部静态变量。静态变量和全局变量都会在内存中存储直至程序运行结束。值得注意的是局部静态变量仍然只在其作用域内有效,而由于其值一直存储在内存中,所以下次在其作用域内使用时,会在“原来值”的基础上使用,如下例所示:

int f(){
	static int a=1;
	return a++;
}int main(){
	for (int i=0;i<5;i++){
		cout<<f()<<endl;
	}
}

输出为:
1
2
3
4
5
由此可以看出a的值不会因为函数f的销毁而销毁,这就是静态局部变量的应用。

使用动态分配内存的存储空间有局部变量存储,和用户主动申请的内存空间。
局部变量是在函数内部定义的变量,存储在栈数据区当中。局部变量只作用于函数内部,当函数运行结束,就将其分配出去的内存再拿回。栈中的内存管理由编译器实现
C语言允许用户使用malloc等函数自行申请存储空间,这部分存储空间从堆数据区开辟。堆中内存管理交给用户。
最后,常量变量使用const修饰,常量数据的值不可更改,也就是说数据区只可读不可写。常量存储在常量数据区当中。

接下来说一说C和C++中,用户如何申请存储空间来使用。
C语言使用malloc,realloc和calloc进行内存申请。
链接有详细讲解:https://blog.csdn.net/weixin_43447989/article/details/90745514
简单总结为:
malloc申请一定大小的存储空间并返回其的指针
calloc在内存分配同时初始化内存中数据全部为0.
realloc则对已经分配过空间重新进行分配,若后续空间充足则分配给之,若不充足则重新开辟一个空间,并将数据拷贝至新的空间内,最后返回新分配的地址。
在使用上述函数申请内存空间后,一定要检查是否分配成功(分配失败则返回空指针)

内存区使用完(之后不再需要这部分数据)后,一定要将其内存空间释放,否则会造成内存泄漏。free函数完成释放任务。

C++内存申请和释放主要是用new和delete完成,细节就不讲了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值