动态内存管理

一、C语言动态内存管理

C语言使用malloc/calloc/realloc/free进行动态内存管理

#include<stdio.h>
int main()
{
	//malloc一次最多申请1兆的内存空间
	//当返回值为NULL时,不再继续分配空间
	int* p1 = (int*)malloc(sizeof(int)* 4);
	free(p1);

	//calloc将申请的空间初始化为0
	int* p2 = (int*)calloc(4, sizeof(int));

	//realloc
	//1、原来没有空间,直接申请空间,相当于malloc
	//2、扩容:改变原有的空间大小
	//3、重新开空间:开辟一段新的空间,将原有内存的内容拷贝过去
	//注意:不会对新开辟的空间初始化
	int* p3 = (int*)realloc(p2, sizeof(int)* 6);
	free(p3);

	return 0;
}

注意:堆上的内存,需要用户自己来管理,动态malloc/calloc/realloc的空间必须要free掉,否则会造成内存泄漏

          栈上的空间具有函数作用域,在函数结束后系统自定回收,不用用户管理

二、C++动态内存管理

C++通过new和delete运算符进行内存管理


注意:new和delete、new[]和delete[]一定要配对使用

三、malloc/free和new/delete的区别和联系:

(1)它们都是动态管理内存的入口

(2)malloc/free是C/C++标准库的函数,new/delete是C++操作符

(3)malloc/free只是进行动态分配/释放内存空间。new/delete除了会分配空间还会调用构造函数和新、析构函数进行初始化和清理(清理成员)

(4)malloc/free需要手动计算类型大小且返回值为void*,new/delete可自己计算类型大小返回对应的类型的指针

四、C++的其他内存管理接口

void* operator new(size_t size);
void operator delete(size_t size);
void *operator new[](size_t size);
void operator delete[](size_t size);

(1)operator new/operator delete、operator new[]/operator delete[]和malloc/free用法一样

(2)它们值负责分配/释放空间,不会调用对象构造函数/析构函数来初始化/清理对象

(3)实际上operatror new/operator delete只是malloc/free的一层封装

【new作用】

调用operator new 分配空间

调用构造函数初始化对象


【delete作用】

调用析构函数清理对象

调用operator delete释放空间


【new[]作用】

调用operator new分配空间

调用N次构造函数分别初始化每个对象


【delete[]作用】

调用N次析构函数清理对象

调用operator delete释放空间



面试题

static int s1 = 1;
int s2 = 2;
int f(int a)
{
	static int s3 = 3;
	
	char *p1 = "abcd";
	char p2[] = "abcd";
	char *p3 = new char[10];
	//1、计算下列结果
	sizeof(p1)  4  指针的大小
	sizeof(p2)  5  数组的大小(数组大小不计\0)
	strlen(p1)  4  strlen 不计\0
	strlen(p2)  4  strlen 不计\0


	//2、下面代码是否可以通过编译?如果通不过,是那句有问题?
	*p1 = '1';    不行,p1指向常量区
	*p2 = '2';
	

	//3、选择题
	A、栈   B、堆  C、静态区  D、常量区
		s1在哪     C
		s2在哪     C
		s3在哪     C
		p1在哪     A
		p2在哪     A
		p3在哪     A
		*p1在哪    D
		*p2在哪    A
		*p3在哪    B
}

主要内容:本文详细介绍了一种QRBiLSTM(分位数回归双向长短期记忆网络)的时间序列区间预测方法。首先介绍了项目背景以及模型的优势,比如能够有效利用双向的信息,并对未来的趋势上限和下限做出估计。接着从数据生成出发讲述了具体的代码操作过程:数据预处理,搭建模型,进行训练,并最终可视化预测结果与计算分位数回归的边界线。提供的示例代码可以完全运行并且包含了数据生成环节,便于新手快速上手,深入学习。此外还指出了模型未来发展的方向,例如加入额外的输入特性和改善超参数配置等途径提高模型的表现。文中强调了时间序列的标准化和平稳检验,在样本划分阶段需要按时间序列顺序进行划分,并在训练阶段采取合适的手段预防过度拟合发生。 适合人群:对于希望学习和应用双向长短时记忆网络解决时序数据预测的初学者和具有一定基础的研究人员。尤其适用于有金融数据分析需求、需要做多一步或多步预测任务的从业者。 使用场景及目标:应用于金融市场波动预报、天气状况变化预测或是物流管理等多个领域内的决策支持。主要目的在于不仅能够提供精确的数值预计还能描绘出相应的区间概率图以增强结论置信程度。 补充说明:本教程通过一个由正弦信号加白噪构造而成的简单实例来指导大家理解和执行QRBiLSTM流程的所有关键步骤,这既方便于初学者跟踪学习,又有利于专业人士作为现有系统的补充参考工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值