动态内存

动态内存

到现在为止,我们所有的计划,我们只有尽可能多的可用内存,我们宣布我们的变量,所有这些的大小来确定的源代码中,执行程序前。 但是,如果我们需要一个变量的内存量,可以在运行时才能确定? 例如,在我们需要的情况下,一些用户输入来确定所需的存储空间量。 

答案是动态内存 ,其中C + +集成运算符new和 delete。 

运营商新的和新的[]

为了请求动态内存,我们使用新的操作员。 新的随后的数据类型的说明符,并且如果一个以上的元素的序列是必需的,其中有多少在方括号[]。 它返回一个指向新分配的内存块的开始。 它的形式是: 

指针=新型 
指针=新型number_of_elements] 

第一个表达式用于分配内存以包含一个单一的元素类型类型 。 第二个是用来分配一个块(数组)的元素类型的类型 ,其中number_of_elements是一个整数值,代表这些。 例如: 

1 
 2 
 
 int * bobby; bobby = new int [5]; 


在这种情况下,系统动态分配空间int类型的五行,并返回一个指针,该序列的第一个元素,这是分配鲍比 。 因此,现在,鲍比指向一个有效的内存块int类型的五行与空间。 



访问的第一个元素可以由鲍比指出与表达鲍比[0]或表达式*鲍比 。 两者是等价的一节中的有关指针已经解释了。 可以访问 Bobby的第二个元素[1]*(鲍比+1)等等...... 

你可以想声明一个正常的数组和动态内存分配的指针,正如我们刚才做的区别。 最重要的区别是,一个数组的大小是一个恒定值,这就限制了它的尺寸,我们决定于设计的程序,在执行前的那一刻,而动态内存分配的期间,使我们能够分配内存程序的执行(运行时)使用的任何变量或常量的值作为它的大小。 

我们的程序所要求的动态内存分配系统内存堆。 然而,计算机存储器是一种有限的资源,并且它可以被用尽。 因此,重要的是有一些机制来检查,如果我们的请求分配内存是成功还是失败。 

C + +提供了两个标准的方法来检查,如果分配成功: 

其一是通过处理异常。 使用这种方法抛出bad_alloc的类型的一个例外是当分配失败。 例外的是一个功能强大的C + +的功能在这些教程稍后解释。 但是现在你应该知道,如果抛出此异常,它不是由一个特定的处理,终止程序执行。 

这种异常的方法是使用新的默认的方法,是一个像在声明中使用: 

 
 bobby = new int [5]; // if it fails an exception is thrown 


另一种方法被称为抛出异常 ,会发生什么,当它被用来当内存分配失败,而不是抛出一个bad_alloc异常或终止程序,返回的指针由是一个空指针,程序继续执行。 

这种方法可以通过使用一种特殊的称为抛出异常的对象,指定在头文件<new>宣布, 新的论点: 

 
 bobby = new (nothrow) int [5]; 


在这种情况下,如果此块内存分配失败,失败可以通过检查检测到,如果巴比了一个空指针值: 

 1 
 2 
 3 
 4 
 5 
 
 int * bobby; bobby = new (nothrow) int [5]; if (bobby == 0) { // error assigning memory. Take measures. }; 


nothrow的方法不是例外方法需要更多的工作,因为返回的值进行检查后,每内存分配,但我会用它在我们的例子,因为它简单。 总之,这种方法可以变得单调乏味的大型项目,在异常的方法通常是首选。 异常的方法将在后面详细说明在本教程中。 

运营商删除,并删除[]

由于动态存储器的必要性通常仅限于特定的时刻,在一个程序中,一旦不再需要它应该被释放,以便内存再次变为可用其他请求动态内存。 这是一个目的 delete运算符,其格式为: 

 1 
 2 
 
 delete pointer; delete [] pointer; 


应的第一个表达式用来删除分配给一个元素,而第二个元素的数组分配的内存的内存。 

必须是一个指针作为参数传递的值删除以前分配的内存块新的 ,或一个空指针(空指针的情况下, 删除不产生影响)。
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值