草庐IT

c++ - 为什么堆的数量总是1?

我正在使用WinDbg查看进程中的堆数,方法是dt_PEB@$peb。我得到以下信息,+0x088NumberOfHeaps:1现在根据AdvancedWindowsDebugging一书,Mostapplicationsimplicitlyusecomponentsthatcreatetheirownheaps.AgreatexampleistheCruntime,whichcreatesitsownheapduringinitialization.我在main处添加了断点,但我仍然可以看到只有一个堆在处理中。其次,我运行了以下代码,堆的数量仍然是1。BYTE*pAlloc1=NUL

windows - 从包含一堆重复项的文件夹中删除超过 5 个重复项的文件

好吧,这让我发疯了,但我会尽力解释自己:)我有一个重复项和非重复项的文件夹,如下所示1.txt1.txt1.txt2.txt2.txt3.txt3.txt4.txt4.txt4.txt4.txt5.txt6.txt7.txt7.txt7.txt7.txt8.txt现在我只想查找超过3个文件的重复项,在本例中就是所有7.txt和4.txt文件。但文件继续infinity.txt所以我无法预先设定条件。脚本必须识别出超过3个重复项,以便我可以提取这些文件。---好吧,所以我尝试了下面的脚本,它运行良好,但它没有像上面提到的那样“提取”。Here是我问过的一个问题的链接,但我很难解释清楚。`

c++ - 启用 dll 的 gflags 完整堆不起作用

我正在尝试使用调试gflags工具通过dlls选项启用整页堆。这可以使用应用程序启用整页堆,但仅使用指定的dll。当我不使用dlls选项时它工作正常。我能够在任何试图覆盖已分配内存块的尝试中获得异常。但是,当我尝试使用dlls选项启用相同的功能时,根据文档,当它应该在dll代码上时,我不会在主应用程序代码或dll代码分配的内存块上出现异常。我在WindowsXP和Windows7上都试过,得到了相同的行为。我检查了很多次,以防我输入错误的dll名称而无法在dll上启用整页堆。两个命令都试过了:gflags-p/enabletest_dll1_app.exe/dllstest_dll1.

c++ - 查找堆损坏

这是我之前问题的延伸,Applicationcrashwithnoexplanation.我有很多崩溃可能是由应用程序服务器上的堆损坏引起的。这些崩溃只发生在生产中;它们无法在测试环境中重现。我正在寻找一种方法来追踪这些崩溃。建议使用ApplicationVerifier,它会很好,但它不能用于我们的生产服务器。当我们尝试使用应用程序验证器在生产环境中启动它时,它变得非常慢以至于完全无法使用,即使这是一个相当强大的服务器(64位应用程序、16GB内存、8个处理器)。在没有应用程序验证器的情况下运行它,它只使用大约1GB的内存和不超过任何处理器周期的10-15%。是否有任何其他工具可以在

java - 如何从 cmd 永久增加芝麻商店的堆大小?

有人可以给我一些建议吗:(a)如何判断当前的heapsize。(b)如何增加堆大小。不幸的是,当前的主题对我来说似乎非常模糊。 最佳答案 您可以通过浏览器访问Sesame服务器(例如http://localhost:8080/openrdf-sesame/)并单击左侧菜单中的“系统”来了解Sesame的当前堆大小。它将显示当前使用的内存和最大堆大小。要增加堆大小,最简单的方法就是为Tomcat本身分配一个更大的堆。看看TomcatFAQentry关于如何做到这一点,或进行Google搜索,有大量关于此主题的有用方法(here'son

c++ - 从地址查找堆或堆 block 或段

我一直在调试软件中的堆损坏。我可以将数据写入堆并控制一些指针。我可以在不知道这一点的情况下实现执行代码的目标,但这让我有点困惑。问题是我找不到正在写入的block在哪个堆中,也找不到堆段。我在Windbg下使用了:!heap-x[address]和!heap-x-v[address]但他们没有给我任何结果。我知道当第一个堆中没有可用的未提交空间时,某些堆可能会保留另一个堆段。但是,我已经转储了所有堆段,但找不到基地址与我要查找的段相似的段。对我来说似乎有点奇怪,没有进程或应用程序特定的堆有这些block!! 最佳答案 如果堆已损坏,

windows - 为什么 Windows Search 会在我的 IFilter 中查询一堆奇怪的界面?

我已经将IFilter实现为nativeVC++ATL进程内COM服务器。WindowsSearch不会使用它-它会创建我的IFilter的一个实例,然后执行一系列QueryInterface()调用,具体来说:编码(marshal)IStdMarshalInfo具有{4C1E39E1-E3E3-4296-AA86-EC938D896E92}接口(interface)ID的东西和其他几个。由于我的IFilter仅实现IFilter、IPersist和IPersistFile,大多数调用返回E_NOINTERFACE,因此WindowsSearch仅释放我的对象而不执行任何操作。它为什么

c# - .NET EXE 和 DLL 之间的堆栈/堆差异

这个问题困扰了我很久:.NETEXE和DLL文件都有地址空间。我知道他们都有代码空间和全局变量空间。但我想知道DLL是否有自己的堆和堆栈空间。 最佳答案 进程拥有堆。每个线程都拥有自己的堆栈。当EXE调用DLL中的函数时,使用相同的堆栈,因为函数调用在同一线程中。要说明的另一点是进程具有加载EXE和DLL的地址空间。 关于c#-.NETEXE和DLL之间的堆栈/堆差异,我们在StackOverflow上找到一个类似的问题: https://stackoverf

c++ - 什么时候使用HeapCreate函数或者什么情况下需要堆的数量?

WindowsAPI有一组用于堆创建和处理的函数:HeapCreate、HeapAlloc、HeapDestroy等。我想知道程序中另一个堆有什么用?从碎片的角度来看,您将获得外部碎片,其中内存未在堆之间重用。所以即使使用低碎片堆,仍然存在碎片。附加堆的内存管理似乎是低级的。所以它们不容易使用。此外,可以使用从堆分配和管理分配的内存来模拟额外的堆。那么有什么用呢?你用过吗? 最佳答案 一个用例可能是一个长时间运行的复杂进程,它执行大量内存分配和释放。如果用户想要中断进程,那么清理当前分配的内存的一种简单方法可能是将所有内容都放在私有

java - 我可以在 Windows 64 位平台上安全使用的最大 Java 堆大小是多少?

我们使用64位Windows2003服务器运行WebSphere/J2EE应用程序(JVM也是64位)。机器有16GB物理内存。不幸的是,我们的应用程序是内存密集型的,我们仍然需要一些时间来添加额外的内存。我了解操作系统本身需要一定数量的内存。话虽这么说,假设这是系统上运行的唯一应用程序,我们可以使用的最大堆大小是安全的(没有分页?)? 最佳答案 我认为答案将取决于许多因素,其中许多因素很难预测。IMO,确定安全最大堆大小的最实用方法是反复试验。我会从大约15Gb的最大堆大小开始,查看系统的内存/分页统计信息,然后向上或向下调整。