new-如何释放堆的部分内存

问题描述

如何释放堆的部分内存
int *p*q;
p=new int[10];
q = P+5;
delete q;//如何只释放P+5 以后的内存?

解决方案

一般来说堆分配器分配一块内存时会在这块内存的头部或者尾部保存一些信息(包括这块内存的大小和指向其他内存块的指针)
释放一块堆内存时需要先找到之前保存的信息.

还没有见过可以部分释放一块堆内存一般都是整块释放.

但从技术上是可以实现的.

我之前写过一个简单的堆分配器基本原理如上可以参考一下:http://blog.csdn.net/ce123_zhouwei/article/details/21706451

时间: 2024-09-14 21:56:17

new-如何释放堆的部分内存的相关文章

c-c++ 求大神帮忙 如何释放堆中空间

问题描述 c++ 求大神帮忙 如何释放堆中空间 #include using namespace std; int & getInt(const int v) { int *p = new int(v); return *p; } int main() { int &n = getInt(888); cout << n << endl; int *pp = &n; delete pp; } 解决方案 1. #include using namespace s

哪个更快:Java堆还是本地内存

使用Java的一个好处就是你可以不用亲自来管理内存的分配和释放.当你用new关键字来实例化一个对象时,它所需的内存会自动的在Java堆中分配.堆会被垃圾回收器进行管理,并且它会在对象超出作用域时进行内存回收.但是在JVM中有一个'后门'可以让你访问不在堆中的本地内存(native memory).在这篇文章中,我会给你演示一个对象是怎样以连续的字节码的方式在内存中进行存储,并且告诉你是应该怎样存储这些字节,是在Java堆中还是在本地内存中.最后我会就怎样从JVM中访问内存更快给一些结论:是用Ja

new生成变量不释放是否会造成内存泄露

问题描述 new生成变量不释放是否会造成内存泄露 MFC中的对话框初始化函数有以下代码, 其中用new生成的东西,不释放是否会造成内存泄露? 如果会造成内存泄露,改怎样处理? 好多书上经常这么用,也没看到在哪里释放了. HDITEM item; item.cxy=200; item.mask=HDI_WIDTH; m_propertyGrid.GetHeaderCtrl().SetItem(0, new HDITEM(item)); CMFCPropertyGridProperty *pProp

iframe如何动态创建及释放其所占内存_javascript技巧

最近参与一个项目的开发,由于项目是基于浏览器的胖客户端(RIA)应用程序,页面中大量调用iframe.后期测试发现浏览器内存一直居高不下,而且打开iframe页面越多内存占用越大,在IE系列浏览器中尤其明显.所有打开的iframe页面即使关闭了,内存使用也没有明显的下降,IE浏览器在内存占用达到400M左右就变得很卡.分析发现是iframe没有释放造成的,于是对所有已关闭的iframe所占用的内存进行释放,虽然不能完全释放,但是iframe内存占用量不会一直增长,整个应用内存使用量控制在150M

Java直接(堆外)内存使用详解

本篇主要讲解如何使用直接内存(堆外内存),并按照下面的步骤进行说明: 相关背景-->读写操作-->关键属性-->读写实践-->扩展-->参考说明 希望对想使用直接内存的朋友,提供点快捷的参考. 数据类型 下面这些,都是在使用DirectBuffer中必备的一些常识,暂作了解吧!如果想要深入理解,可以看看下面参考的那些博客. 基本类型长度 在Java中有很多的基本类型,比如: byte,一个字节是8位bit,也就是1B short,16位bit,也就是2B int,32位bit

关于C++ delete 来释放new分配的内存

一般在C语言中我们使用malloc和free进行内存分配和释放,但是在C++中增加了一个新的 new和delete 操作来进行,按照C++的说法delete是释放内存但是指针得到保留,防止内存 泄露,并且NEW和DELETE要成对出现.我们知道指针本生也是一个保存在内存中某个位置的变量, 如果释放了内存我们是否可以考虑为其中的值得到了删除,而指针自身可以再次指向其他的值? 而还有一点我们需要明白使用NEW分配的内存是HEAP而变量的赋值是栈, 在OS中我们大概可以理解如下(32位系统为例),我这

如何通过命令释放 Mac OS X 内存空间?

  Mac OS X的内存管理机制一直都是最棒的,充分利用着你机器的内存,虽然完美,但是有时候某些程序在退出后没有完全释放内存("非活跃"状态),导致可用内存较少,其实可以让 Mac OS X 强制清理那部分内存. 首先打开"终端"(应用程序->实用工具) 输入以下命令: purge 稍等片刻,你可在"活动监视器"( Activity Monitor )里面观察你内存的释放状况.

释放动态申请数组内存-C++中动态申请的数组内存异常时内存释放问题

问题描述 C++中动态申请的数组内存异常时内存释放问题 在C++的一个方法中动态申请了一段数组的内存,还未通过delete[] 语句释放这段内存,方法异常,此时代码不会执行后面的delete[] 语句了,那么前面申请的这段数组内存怎么释放? C++中的auto_prt只支持单个对象动态内存的管理,对于数组动态申请的内存怎么管理? 解决方案 应该在运行期系统自动帮你归还,前提是你的数组是由class构成,但不是内置类型.详见EFFECTIVE C++第三版条款52(写了placement new也

.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱

内容导读 •概述 •当你声明一个变量背后发生了什么? •堆和栈 •值类型和引用类型 •哪些是值类型,哪些是引用类型? •装箱和拆箱 •装箱和拆箱的性能问题一.概述 本文会阐述六个重要的概念:堆.栈.值类型.引用类型.装箱和拆箱.本文首先会通过阐述当你定义一个变量之后系统内部发生的改变开始讲解,然后将关注点转移到存储双雄:堆和栈.之后,我们会探讨一下值类型和引用类型,并对有关于这两种类型的重要基础内容做一个讲解. 本文会通过一个简单的代码来展示在装箱和拆箱过程中所带来的性能上的影响,请各位仔细阅读