问题标签 [heapalloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
807 浏览

.net - 从托管 DLL 中调用的非托管 DLL 调用 malloc() 会产生访问冲突

我有一套用 C++/CLI 编写的测试,它们调用本机 DLL 以远程测试 Windows CE 设备。在测试设置过程中的两个时间点,本机堆上的内存被分配——一次分配 512 字节,另一次分配 572 字节。在这两种情况下,malloc() 最终都会使用 CRT 堆调用 HeapAlloc()。CRT 堆的句柄在调用之间没有改变。用于分配 572 字节的调用失败,出现异常 0xc0000005(如果需要,我可以尝试提供代码示例,但必须弄清楚哪些示例足够通用,不会破坏 NDA)。

0 投票
3 回答
2486 浏览

c++ - HeapAlloc 间歇性失败

我们有一个 DLL(使用 VC2005 构建)代表调用应用程序进行一些处理。这种处理需要相当多的内存。DLL 通过 heapAlloc 创建此内存,如下所示:

堆通过以下方式分配:

在创建之后,我们实际上分配了 20 个 myStruct,然后释放它们以确保它能够处理这些问题。所以我们知道有足够的空间。

问题是在某些情况下 HeapAlloc 返回 NULL。如果发生这种情况,我们会做一个HeapValidate(m_hStackHeap, 0, NULL)总是返回非零(意味着一切都很好)。所以我们知道堆没问题。

我们还同意我们永远不会同时有超过 10 个并发分配,因此应该有足够的空间,因为初始 heapCreate 保留了那么多。

对 HeapAlloc 的下一次调用通常会成功。这种行为非常零星。它会正常工作,然后分配几次失败,然后再次开始正常工作。

关于发生了什么的任何想法?

0 投票
1 回答
80 浏览

windows - 为什么在使用指针 Windows 时系统会分配更多内存?

我使用 HeapAlloc 分配大量内存,例如 400 MB,但是当我检查程序的内存使用情况时,它实际上使用了 1 GB。

我调试了我的程序,我意识到执行此代码时内存使用量会增加

为什么会这样??

0 投票
0 回答
3142 浏览

winapi - malloc 返回 NULL 并将 errno 设置为 ENOMEM,但有足够的堆空间可用?

我有一种情况,malloc()返回NULL并设置errnoENOMEM. 但是 CRT 堆(可增长的)有大量内存可供使用。时malloc,我的进程内存约为 900 MB。主机进程是在 Sun HotSpot JVM 下执行的 Java 可执行文件。

malloc()我正在做的是 80 兆字节,并且失败了。如果我分配 60 MB,它会成功。之后,分配了 50 MB,然后是另一个,另一个也成功了:显然,我还有很多内存,但是 80 MB 的 malloc 似乎对于操作系统来说太“大”了。

我正在使用具有 4 GB RAM 的 Windows 7 x64 SP1。我的进程是一个 32 位进程,使用 VC++ 2010 SP1 构建。我正在使用低碎片堆,这是 Win 7 上的默认设置 - 我还使用 HeapQueryInformation 进行了验证。我正在使用的 VC2010 C 运行时以这种方式创建堆:

根据文档HeapCreateHeapAlloc将自动调用VirtualAlloc大于 512KB 的块。

malloc()如果这不是内存不足,到底会导致什么失败?是不是我的记忆太碎片化了?我认为 Windows 会自动压缩堆。这真的很奇怪,我以前从未见过这种行为。

另一台装有 32 位 Windows XP SP3 的计算机表现出相同的行为。

谢谢,马丁

0 投票
2 回答
388 浏览

c++ - VC++ HeapAlloc内部函数给出空指针

我试图用来HeapAlloc()分配一个由SetupDiGetDeviceRegistryProperty().

里面GetDeviceInformation()我有:

在里面GetRegistryProperty()我有:

HeapAlloc()按预期工作(缓冲区被属性填充)直到GetRegistryProperty()返回。此时,缓冲区始终为 NULL。这也是预期的吗?如何返回一个 char * 指向一个在创建它的函数生命周期之后存在的数组?我假设我不明白 HeapAlloc() 是如何工作的。

我将它放在单独的函数中的原因是我想GetRegistryProperty()用不同的 s 多次调用DWORD Property。在我将代码移动到单独的函数之前,它运行良好。

0 投票
1 回答
5764 浏览

windows - HeapCreate 和 HeapAlloc 混淆

我正在做一个关于动态内存管理的项目。我对 HeapCreate 和 HeapAlloc 函数感到困惑。

对于 HeapCreate() 函数,我们可以创建一个堆,该函数将返回一个 HANDLE。我们可以初始化堆的大小。

假设 winHandle = HeapCreate(0, 2 * 1024, 0);

然后,我可以通过 HeapAlloc 函数在这个堆上进行分配。但我对堆的大小感到困惑。我试了一个例子,我在这个堆上调用了 HeapAlloc(winHandle, 0, 1024) 两次,所以总数是 2 * 1024。但是我仍然可以多次调用 HeapAlloc 而不会出错。

假设我调用 HeapAlloc(winHandle, 0, 1024) 三次。分配的总大小将是 3 * 1024。它大于堆大小 2 * 1024。但没有错误。

谁能帮我回答这个问题?

谢谢,

这是测试代码。

0 投票
1 回答
795 浏览

c++ - “LPVOID”不能分配给 X 类型的实体

我正在处理一个处理 USB 设备的函数。

但我已经在一些简单的事情上遇到了问题:

我收到编译器错误

有人可以告诉我我在这里做错了什么吗?谢谢!

0 投票
1 回答
719 浏览

memory - MASM dll 内存分配

我需要有关我的 MASM dll 的帮助。我正在计算数组中的元素,然后我想为另一个数组分配内存,在 C 中我使用向量。我尝试使用:

或者

但我遇到了错误undefined symbol : GetProcessHeap undefined symbol : HeapAlloc

我在 C# 应用程序中使用这个库。你能告诉我如何动态分配内存的例子吗?

0 投票
1 回答
302 浏览

memory - 多线程应用程序中的 MASM dll 内存分配

我在这里询问了如何在 MASM 中动态分配内存,但我还有 2 个问题。

如何为字节分配内存?

第二个问题,我可以在多线程应用程序中使用这种分配内存的方法还是应该使用 GlobalAlloc?

0 投票
1 回答
298 浏览

memory - MASM - HeapAlloc 抛出异常

我又来了。我在 c# 应用程序中使用 masm .dll,但现在我的代码在行中抛出“System.AccessViolationException”:INVOKE HeapAlloc, edx, 0, <size> 你能告诉我是什么原因造成的问题吗?

这是我的 ASM 代码: