Articles of 内存

出于虚拟内存地址空间(Borland C ++ Builder 6程序)

我有一些在C ++ Builder 6下编写的应用程序的问题。经过一段时间的运行(一周,一个月),应用程序崩溃并closures,没有任何错误消息。 在我的应用程序日志崩溃前不久,我得到了许多“内存不足”的例外。 我查看了抛出内存exception的过程(下面的截图),它有很多未提交的私有内存空间。 什么可能是这种行为的原因? 几年前,我曾经有过这样的问题。 原因是在链接器选项中未选中“使用dynamic库”选项。 当我检查后,问题消失,反之亦然。 我所做的testing应用程序只是调用“新字符[1000000]”,然后删除。 每次释放内存(在Windows任务pipe理器中没有提交的内存上升),但是一段时间后,内存不足,VMMap显示了完全相同的结果。 很多保留的私人内存,但大部分都没有提交。 现在的问题返回,但我不能以同样的方式解决它。 我不知道是不是这个原因,但是我把Builder 6和2010安装在同一台机器上。 现在我只有Builder 6,看起来我不能像以前那样用testing应用程序重现错误。 以太的方式似乎有一些内存pipe理器错误什么的。 CodeGuard不显示任何内存泄漏。 当我用“new”创build内存块时,它立即显示在“内存提交大小”中,当删除内存使用量减less时,所以我假设内存泄漏不是这种情况,任务pipe理器不会显示太多的“内存提交大小” 。 有什么我可以做的吗? 有没有什么办法可以释放未提交的内存? 如何进一步诊断问题? 截图: http : //i.stack.imgur.com/UKuTZ.jpg

为什么JVM报告的内存比linux进程驻留集大小多?

在启用本机内存跟踪的情况下运行Java应用程序(在YARN中)时( -XX:NativeMemoryTracking=detail请参阅https://docs.oracle.com/javase/8/docs/technotes/guides/vm/nmt-8.html和https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html ),我可以看到JVM在不同类别中使用了多less内存。 我在jdk 1.8.0_45上的应用程序显示: 本机内存跟踪: 总计:保留= 4023326KB,承诺= 2762382KB – Java堆(保留= 1331200KB,承诺= 1331200KB) (mmap:reserved = 1331200KB,承诺= 1331200KB) – 类(保留= 1108143KB,承诺= 64559KB) (课#8621) (malloc = 6319KB#17371) (mmap:reserved = 1101824KB,承诺= 58240KB) – 线程(保留= 1190668KB,承诺= 1190668KB) (线程#1154) (stack:reserved = 1185284KB,承诺= 1185284KB) (malloc = 3809KB#5771) (舞台= 1575KB#2306) – 代码(保留= 255744KB,承诺= 38384KB) (malloc = 6144KB#8858) (mmap:reserved = 249600KB,承诺= 32240KB) – […]

如何将虚拟内存地址转换为物理地址?

在我的C ++程序(在Windows上),我分配了一块内存,可以确保它在物理内存中保持locking(未打开和连续)(即使用VirtualAllocEx(),MapUserPhysicalPages()等)。 在我的过程中,我可以得到该块的虚拟内存地址, 但是我需要找出它的物理内存地址,以便将它传递给某个外部设备。 1.有什么办法可以在用户模式下将虚拟地址转换成我的程序中的物理地址? 2.如果没有,我只能在KERNEL模式下find这个虚拟到物理的映射。 我想这意味着我必须写一个驱动程序来做到这一点…? 你知道我可以使用的任何现成的驱动程序/ DLL / API,我的应用程序(程序)将与接口进行翻译吗? 3.如果我自己写驱动程序,我该怎么做这个翻译? 我使用哪些函数? 它是mmGetPhysicalAddress() ? 我如何使用它? 另外,如果我理解正确,mmGetPhysicalAddress()返callback用进程上下文中的虚拟基地址的物理地址。 但是,如果调用进程是驱动程序,并且正在使用我的应用程序调用该函数的驱动程序,那么我将更改上下文,并且我不再在应用程序的上下文中调用mmGetPhysicalAddress例程…如何翻译应用程序(用户模式)内存空间中的虚拟地址,而不是驱动程序? 任何答案,提示和代码摘录将非常感谢! 谢谢

如何获得在C + +的OpenGL使用的字节总内存?

如何获得在C + +的OpenGL使用的字节总内存? 我正在构build一个OpenGL应用程序,总的内存似乎正在上升,我可以得到有关由我自己创build的variables和对象所使用的总内存的信息,但不能保证OpenGL为其variables和对象使用了多less内存&textures等。那么是否有可能得到在C + +的OpenGL使用的总字节数?

我怎么知道这段内存是全零的?

我的意思是,我malloc一段内存,也许1k也许20bytes ..假设指针是pMem我怎么知道内容pMem是全Zero或\0 。 我知道memcmp但第二个参数应该另一个内存地址… thanx

如何从Windows应用程序内存读取一些数据?

我有一个应用程序,显示一些数据。 我需要附加到这个应用程序的进程,find我需要在内存中的数据(实际上是一个单一的数字),并保存在某个地方。 这个应用程序似乎不使用标准的Windows控件,所以事情不会像使用AutoIt或类似的东西读取控件数据那么简单。 目前我是一个自学者数据库的家伙,并有相当的Windows应用程序debugging知识浅。 甚至不知道我是否正确地问了我的问题。 那么,你能否给我一些关于我应该先读什么的启动指南,以及我应该处理的大方向? 谢谢。