草庐IT

堆和栈

全部标签

c++ - 从堆和内存泄漏中删除 C++ 数组

我有一个关于从堆内存中删除数组的问题。在一本书和thisblog以及其他资源suchasthisone中,我读到要从堆中删除数组,我们必须在delete关键字之后使用[],这样如果我们不要使用[]我们会泄漏内存。例如,考虑下面的代码。//constructingarrayint*s=newint[10];//deletingarrayfromheapdelete[]s;我通过使用valgrind包在Linux中测试了这个小程序,以检查我们有多少内存泄漏是由错误的编码引起的。在Linux中通过以下命令,我看到一切正常sudovalgrind--leak-check=full./这是Lin

c++ - 堆和栈内存是如何管理、实现和分配的?

在C/C++中,我们可以将变量、函数、成员函数、类的实例存储在堆栈或堆上。每个是如何实现的?它是如何管理的(高层)?gcc是否预先分配了一block内存用于堆栈和堆,然后根据请求分发?原始内存来自RAM吗?函数可以分配在堆上而不是堆栈上吗?澄清我真的问的是堆和栈内存的实现和管理。Afterreadingreferencedquestion,我没有找到解决该问题的任何内容...感谢您提供链接 最佳答案 现代操作系统不允许您直接访问硬件RAM,而是将其抽象为所谓的虚拟内存,并按需将其映射到RAM。每个进程通常都有自己的完整地址空间的私有

c++ - 查找 Windows 堆和模块之间的映射

我正在寻找一种方法来找到堆和拥有该堆的模块之间的映射。我通过以下方式检索堆:HANDLEheaps[1025];DWORDnheaps=GetProcessHeaps((sizeof(heaps)/sizeof(HANDLE))-1,heaps);for(DWORDi=0;i我想这样做的原因是在我的应用程序中我发现大约40个堆,一些是标准堆,其他是低碎片堆。现在我想弄清楚哪个模块使用哪种堆。非常感谢! 最佳答案 根据MSDNdocs,GetProcessHeaps调用为您提供了当前进程中所有堆的句柄,而不是系统中的所有堆,因此没有映

Windows 程序集堆和堆栈?

操作系统:Windows732位所以在C++中有一个堆和一个栈。但是我最近开始进行一些汇编学习,但没有看到任何类似的东西,只有一个堆栈,但它看起来就像纯粹的内存。那么堆和栈的实现是特定于c++和其他语言的吗?或者你仍然在汇编中分配一个堆和堆栈?启动可执行文件时,Windows在为进程分配内存方面做了什么?进程如何知道堆栈大小需要多大?怎么了编辑:也许有人可以提供有关CPU/OS如何为进程处理堆和堆栈内存的链接 最佳答案 我的大部分知识都不是特定于Windows的,所以请耐心等待:堆和栈指代内存中的不同区域(但我们仍然在每种情况下谈论

java - Java非堆内存和栈内存有什么区别?如果不是,它们是否相同?它们之间有什么区别?

我正在使用Jconsole监视Java应用程序。内存选项卡显示不同的堆和非堆内存,如堆内存使用情况非堆内存使用内存池“CMSOldGen”内存池“ParEdenSpace”内存池“ParSurvivorSpace”内存池“代码缓存”内存池“CMSPermGen”这些术语之间有什么区别。还请提供一些关于如何通过监视这些参数来发现应用程序行为异常的信息。 最佳答案 在所有基于C的语言(以及大多数其他语言)中,本质上存在三类存储:堆堆栈静态(有多种变化)你熟悉的堆。Stack你也很熟悉,只是你不知道罢了。当你有一个带有“局部”变量的方法时

algorithm - GoLang 堆和堆排序

所以我正在尝试实现一个最大堆来练习,这样我就可以熟悉Go。typeMaxHeapstruct{slice[]intheapSizeint}funcBuildMaxHeap(slice[]int)MaxHeap{h:=MaxHeap{slice:slice,heapSize:len(slice)}fori:=len(slice)/2;i>=0;i--{h.MaxHeapify(i)}returnh}func(hMaxHeap)MaxHeapify(iint){left:=2*iright:=2*i+1largest:=islice:=h.sliceifleftslice[i]{large

Java 进程的内存无限增长,但 MemoryMXBean 报告稳定堆和非堆大小

我正在与一个开发在1GBLinux目标系统上运行的JavaGUI应用程序的团队合作。我们的java进程使用的内存会无限增长,直到Linux最终杀死java进程。我们的堆内存是健康且稳定的。(我们已经广泛地分析了我们的堆)我们还使用MemoryMXBean来监视应用程序的非堆内存使用情况,因为我们认为问题可能出在那儿。但是,我们看到的是报告的堆大小+报告的非堆大小保持稳定。下面是一个示例,说明在我们的目标系统上运行应用程序时,具有1GBRAM(MemoryMXBean报告的堆和非堆,使用Linux的top命令(驻留内存)监控的Java进程使用的总内存)上的数字可能看起来如何:启动时:已提

memory - "a"堆和 "the"堆有什么关系?

堆是一种树数据结构,其中较高级别的树总是包含比较低级别更大(或更小,如果以这种方式设置)的值。“该”堆是程序可用于动态分配的一堆空闲RAM。它们都被称为“堆”,但一个与另一个有什么关系? 最佳答案 说实话,没什么。我想heap这个词只是简单地使用它的日常(非技术)用法,并作为相当好的类比分别应用于这两个概念。在第一种情况下(树数据结构的含义),描述heap是最合适的,因为“更大”的对象被放置在树中更高的位置(其中“更大”由任意键确定功能)-即在较大的物体之上有一种较小的物体堆积(或在顶部较大,取决于您的想法)。这就是我的解释;最先将

【数据结构与算法】队列和栈的相互实现以及循环队列

目录🌔一.用队列实现栈🌙1.题目描述🌙2.思路分析🌙3.代码实现⛈二.用栈实现队列☔1.题目描述☔2.思路分析☔3.代码实现🌈三.实现循环队列🌔一.用队列实现栈🌙1.题目描述我们先看一下题目链接🌙2.思路分析我们知道栈是后进先出的线性表,题目要求我们使用两个队列来实现,队列的特性是先进先出,从队尾进队头出,图解如下:那我们如何向队列进元素1234出队列是4321的顺序呢。假设现在队列中有1234:我们想让4先出队列的话,可以将前面的123先转移到另一个队列中,再出4,以此类推实现后进先拿出。使得一个队列为空用来出队列时倒元素的目的地,另一个不为空的队列用来插入数据。想要返回栈顶元素只要返回非空

【数据结构与算法】队列和栈的相互实现以及循环队列

目录🌔一.用队列实现栈🌙1.题目描述🌙2.思路分析🌙3.代码实现⛈二.用栈实现队列☔1.题目描述☔2.思路分析☔3.代码实现🌈三.实现循环队列🌔一.用队列实现栈🌙1.题目描述我们先看一下题目链接🌙2.思路分析我们知道栈是后进先出的线性表,题目要求我们使用两个队列来实现,队列的特性是先进先出,从队尾进队头出,图解如下:那我们如何向队列进元素1234出队列是4321的顺序呢。假设现在队列中有1234:我们想让4先出队列的话,可以将前面的123先转移到另一个队列中,再出4,以此类推实现后进先拿出。使得一个队列为空用来出队列时倒元素的目的地,另一个不为空的队列用来插入数据。想要返回栈顶元素只要返回非空