问题标签 [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.
.net - 从托管 DLL 中调用的非托管 DLL 调用 malloc() 会产生访问冲突
我有一套用 C++/CLI 编写的测试,它们调用本机 DLL 以远程测试 Windows CE 设备。在测试设置过程中的两个时间点,本机堆上的内存被分配——一次分配 512 字节,另一次分配 572 字节。在这两种情况下,malloc() 最终都会使用 CRT 堆调用 HeapAlloc()。CRT 堆的句柄在调用之间没有改变。用于分配 572 字节的调用失败,出现异常 0xc0000005(如果需要,我可以尝试提供代码示例,但必须弄清楚哪些示例足够通用,不会破坏 NDA)。
c++ - HeapAlloc 间歇性失败
我们有一个 DLL(使用 VC2005 构建)代表调用应用程序进行一些处理。这种处理需要相当多的内存。DLL 通过 heapAlloc 创建此内存,如下所示:
堆通过以下方式分配:
在创建之后,我们实际上分配了 20 个 myStruct,然后释放它们以确保它能够处理这些问题。所以我们知道有足够的空间。
问题是在某些情况下 HeapAlloc 返回 NULL。如果发生这种情况,我们会做一个HeapValidate(m_hStackHeap, 0, NULL)
总是返回非零(意味着一切都很好)。所以我们知道堆没问题。
我们还同意我们永远不会同时有超过 10 个并发分配,因此应该有足够的空间,因为初始 heapCreate 保留了那么多。
对 HeapAlloc 的下一次调用通常会成功。这种行为非常零星。它会正常工作,然后分配几次失败,然后再次开始正常工作。
关于发生了什么的任何想法?
windows - 为什么在使用指针 Windows 时系统会分配更多内存?
我使用 HeapAlloc 分配大量内存,例如 400 MB,但是当我检查程序的内存使用情况时,它实际上使用了 1 GB。
我调试了我的程序,我意识到执行此代码时内存使用量会增加
为什么会这样??
winapi - malloc 返回 NULL 并将 errno 设置为 ENOMEM,但有足够的堆空间可用?
我有一种情况,malloc()
返回NULL
并设置errno
为ENOMEM
. 但是 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 运行时以这种方式创建堆:
根据文档HeapCreate
,HeapAlloc
将自动调用VirtualAlloc
大于 512KB 的块。
malloc()
如果这不是内存不足,到底会导致什么失败?是不是我的记忆太碎片化了?我认为 Windows 会自动压缩堆。这真的很奇怪,我以前从未见过这种行为。
另一台装有 32 位 Windows XP SP3 的计算机表现出相同的行为。
谢谢,马丁
c++ - VC++ HeapAlloc内部函数给出空指针
我试图用来HeapAlloc()
分配一个由SetupDiGetDeviceRegistryProperty()
.
里面GetDeviceInformation()
我有:
在里面GetRegistryProperty()
我有:
HeapAlloc()
按预期工作(缓冲区被属性填充)直到GetRegistryProperty()
返回。此时,缓冲区始终为 NULL。这也是预期的吗?如何返回一个 char * 指向一个在创建它的函数生命周期之后存在的数组?我假设我不明白 HeapAlloc() 是如何工作的。
我将它放在单独的函数中的原因是我想GetRegistryProperty()
用不同的 s 多次调用DWORD Property
。在我将代码移动到单独的函数之前,它运行良好。
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。但没有错误。
谁能帮我回答这个问题?
谢谢,
这是测试代码。
c++ - “LPVOID”不能分配给 X 类型的实体
我正在处理一个处理 USB 设备的函数。
但我已经在一些简单的事情上遇到了问题:
我收到编译器错误
有人可以告诉我我在这里做错了什么吗?谢谢!
memory - MASM dll 内存分配
我需要有关我的 MASM dll 的帮助。我正在计算数组中的元素,然后我想为另一个数组分配内存,在 C 中我使用向量。我尝试使用:
或者
但我遇到了错误undefined symbol : GetProcessHeap
undefined symbol : HeapAlloc
我在 C# 应用程序中使用这个库。你能告诉我如何动态分配内存的例子吗?
memory - MASM - HeapAlloc 抛出异常
我又来了。我在 c# 应用程序中使用 masm .dll,但现在我的代码在行中抛出“System.AccessViolationException”:INVOKE HeapAlloc, edx, 0, <size>
你能告诉我是什么原因造成的问题吗?
这是我的 ASM 代码: