C++动态内存管理

1.C语言中malloc,calloc,realloc的不同

malloc/calloc/realloc用来在堆上开辟空间。

(1)malloc

void *malloc(size_t size);

malloc()在内存的动态存储区中分配一块长度为size字节的连续区域

(2)calloc

void *calloc(size_t nmemb,size_t size);

calloc()与malloc()相似,参数size为申请地址的单位元素长度,nemb为参数个数

(3)realloc

void *realloc(void *ptr,size_t size);

realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,size是重新申请的地址空间的大小

它们三者的区别:

malloc不能初始化所分配的内存空间,需要用memset;

calloc会将所分配的空间中的每一位都初始化为0;

realloc 可以改变原有内存空间大小,原有内存的内容保持不变;若不能改变,将会开辟一段新的内存,但不会对新开辟的空间进行初始化

2.总结并剖析malloc/free和new/delete之间关系和差异。

 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可自己计算类型的大小,返回对应类型的指针。

3.剖析new/delete、new[]/delete[]到底做了些什么事情。

 new做了两件事

1)调用operator new分配空间;

2)调用构造函数初始化对象。

 delete也做了两件事

1)调用析构函数清理对象;

2)调用operator delete释放空间。

new[ ]

1)调用operator new分配空间;

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

delete[ ]

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

2)调用operator delete释放空间。


4.实现NEW_ARRAY/DELETE_ARRAY宏,模拟new[]/delete[]申请和释放数组。

//模拟new[]/delete[]

#define NEW_ARRAY(PTR,TYPE,N)           \
	do                                  \
	{                                   \
	PTR = (TYPE*)operator new(sizeof(TYPE)*N+4); \
	(*(int*)PTR) = N;                   \
	PTR = (TYPE*)((char*)PTR + 4);      \
for (size_t i = 0; i < N; i++)         \
	{                                   \
      new(PTR + i)TYPE;                 \
     }                                  \
}while (false);


#define DELETE_ARRAY(PTR,TYPE)           \
	do                                   \
	{                                    \
	int N = *((int*)PTR - 1);            \
for (int i = 0; i < N; i++)              \
	{                                    \
	   PTR[i].~TYPE();                   \
}	                                     \
	PTR = (TYPE*)((char*)PTR - 4);       \
	operator delete(PTR);                \
}while (false);

class AA{
private :
	size_t i;
public:	
	AA(size_t i = 10)
	{
		cout << "AA()" << endl;
	}
	~AA()
	{
		cout << "~AA()" << endl;
	}		
};
int main()
{
	AA* P2;
	NEW_ARRAY(P2, AA,10);
	DELETE_ARRAY(P2, AA);
	system("pause");
	return 0;
}
运行结果


内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值