草庐IT

heap-memory

全部标签

c++ - 从 C++ 应用程序查询堆

我想对使用C++运行时库的C++native应用程序中的内存泄漏进行故障排除。我可以很容易地知道当前分配的block数(以及可选的总大小)吗? 最佳答案 你可以试试HeapWalk在HeapAPI,不需要第3方库。 关于c++-从C++应用程序查询堆,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/56737608/

c++ - 运算符 "new"仅返回一个类的非本地堆指针?

语言:C++平台:WindowsServer2003我有一个调用DLL的exe。编辑:(exe没有做任何事情,它调用了几个全局函数,这些函数在DLL中完成与DLL相关的所有事情。它没有显式新建任何DLL类)我在DLL中为A类分配(新)内存,它返回给我一个非本地堆指针。我尝试新建DLL中的其他类(在DLL中),“new”为它们返回一个有效的堆指针,它唯一的ClassA是没有被正确分配。我在Windows上并通过此函数调用验证堆:编辑:ClassA*pA=newClassA();_CrtIsValidHeapPointer((constvoid*)pA)我很困惑为什么这只发生在new-in

windows - HeapCreate 和 HeapAlloc 混淆

我正在做一个关于动态内存管理的项目。我对HeapCreate和HeapAlloc函数感到困惑。对于HeapCreate()函数,我们可以创建一个堆,该函数将返回一个HANDLE。我们可以初始化堆的大小。假设winHandle=HeapCreate(0,2*1024,0);然后,我可以使用HeapAlloc函数在这个堆上进行分配。但是我对堆的大小感到困惑。我试了一个例子,我在这个堆上调用了HeapAlloc(winHandle,0,1024)两次,所以总数将是2*1024。但是我仍然可以多次调用HeapAlloc而不会遇到错误。假设我调用了HeapAlloc(winHandle,0,10

c++ - 未处理的异常 Microsoft C++ 异常:cv::Exception at memory location

我刚开始使用OpenCV。我下载了OpenCV2.4.9,并安装了MSVS2010。我的Windows是X64。我遵循了以下步骤:一个。在ConfigurationProperties下,单击Debugging->Environment并复制粘贴:PATH=C:\opencv\build\x86\vc10\binVC++目录->包含目录并添加条目:C:\opencv\build\includeVC++目录->库目录并添加条目:C:\opencv\build\x86\vc10\libLinker->Input->AdditionalDependencies并添加以下内容:opencv_c

java - Stack 和 Heap 是否都存在于您的系统 RAM 中?

问题和题目差不多,栈和堆是否一直存在于内存中?假设Windows是相关机器的操作系统。另外,如果上述问题的答案是肯定的,是否可以告诉JVM在不同的位置创建特定的应用程序Stack和Heap,例如外部microSD卡?或者只是将默认堆栈/堆创建位置设置为RAM以外的某个位置? 最佳答案 嗯,它们可能不会在所有时间都在RAM中。栈和堆只是分配在内存中的数据结构。当您的程序实际使用CPU时,它们都将(至少部分)存在于RAM中。但是,当程序不运行时,操作系统可能会换出堆栈和堆所在的页面。然后可以将部分(或全部)堆栈和堆写入磁盘。我猜你无法告

c++ - TabCtrl_InsertItem : do we need to keep memory of the text alive?

对于TabCtrl_InsertItem,我们需要保留pszTextmember指向有效内存还是操作系统会复制文本以便我们可以立即清除文本?TCITEMtcItem={TCIF_TEXT};CStringstrText;for(inti=0;i我们如何才能知道对于这个函数和future的其他函数哪个是正确的?我在MSDN中找不到它。 最佳答案 操作系统会将字符串复制到内部数据结构中。您不需要维护支持字符数组。您可以在函数调用完成后立即释放它。通常,任何接收字符串的WindowsAPI函数都是这种情况。没错,MSDN文档中没有明确说明

java - 如何在 Windows 中增加 IE 应用程序的堆内存大小?

我在IE中运行java应用程序,但由于堆大小较小,它非常慢。我怎样才能单独增加IE的堆大小,以便应用程序可以在IE中快速运行?我应该更改任何环境变量或任何其他解决方案吗?提前致谢:-) 最佳答案 如何:关闭所有其他应用程序和程序。启动InternetExplorer。在窗口顶部的主菜单栏中选择“工具”。向下滚动并点击“Internet选项”。使用“常规”选项卡,选择“设置”按钮。它位于“Internet临时文件”或“浏览历史记录”部分,具体取决于您使用的InternetExplorer版本。使用slider增加分配给Internet

windows - 如何在 win32 进程中显示 'memory used' 的百分比?

我知道内存使用在Windows上是一个非常复杂的问题。我正在尝试为一个大型应用程序编写一个UI控件,该控件显示“已用内存百分比”数字,以便向用户表明可能是时候清理一些内存了,或者更有可能重新启动应用。一个实现使用MEMORYSTATUSEX的ullAvailVirtual作为基础,然后使用HeapWalk()遍历进程堆以寻找额外的空闲内存。HeapWalk()步骤是必需的,因为我们注意到在运行一段时间后,由堆分配和释放的内存从未返回并由ullAvailVirtual数字报告。经过数小时的密集工作,ullAvailVirtual数字不再准确报告可用内存量。然而,这种方法被证明并不理想,因

windows - 如何避免 "Your system is running low on virtual memory"弹出窗口?

我们的应用程序有时会使用大量内存,这是预料之中的。但是当我们在WindowsXP的高负载下测试它时,我们通常会看到非常烦人的“您的系统虚拟内存不足”弹出窗口,这会阻止我们的自动化、无人值守的测试运行...有没有可能不出现这个弹窗,直接让分配失败?该应用程序将优雅地处理它,并且测试将继续......我们使用的是WindowsXP,但如果解决方案只存在于更高版本中,我很乐意知道。 最佳答案 您可能会使用一种捕获该对话并将其取消的全局对话处理程序。QTP(HPQuickTestProfessional)具有GUI异常处理程序(或者它们叫什

c++ - HeapAlloc 簿记

我读过(http://www.nobugs.org/developer/win32/debug_crt_heap.html),除了请求的内存块之外,HeapAlloc还分配了一些内存用于簿记。簿记信息的大小应为40字节(block前8字节,block后32字节)。但是,当我用我的VS2010运行测试时,实际消耗的内存明显更少。例如,我将1M个整数插入到一个集合中。我为malloc写了一个钩子(Hook)函数来确保每次插入都会触发一个单独的动态内存分配请求来构造一个新节点。根据hook的说法,一个节点需要20个字节。如果我们加上80字节的开销,一个节点的总内存应该是100字节。也就是说,