你好,
感谢你在MSDN发帖。
>>请问一下当我调用_crtheap1 = HeapCreate(0, 4096, 0);申请了4096的内存空间后,HeapAlloc(_crtheap1, 0, 10240);申请的空间超过了4096,但是也能够成功,是不是因为申请的空间可以自动增长?
根据文档:
HeapCreate 函数 (heapapi.h)
dwMaximumSize:
堆的最大大小,以字节为单位。该 HeapCreate功能回合dwMaximumSize到系统页面大小的倍数,然后保留在堆进程的虚拟地址空间大小的块。如果由作出分配请求 HeapAlloc或 HeapReAlloc的功能超过指定大小dwInitialSize,系统将提交对堆,直到堆的最大大小的内存其他页面。
如果dwMaximumSize为 0,则堆的大小可以增长。堆的大小仅受可用内存的限制。分配大于固定大小堆限制的内存块的请求不会自动失败;相反,系统调用 VirtualAlloc函数来获取大块所需的内存。
>>如果自动增长的话那增长的部分和原来的是否一定要连续?
根据文档:根据文档:
堆函数
HeapCreate 请求的内存可能是连续的,也可能不是连续的。 HeapAlloc 在堆中分配 的内存是 连续的。 不应写入堆中的内存或读取堆中的内存,但 HeapAlloc 分配的内存除外,也不应假定 HeapAlloc 分配的两个内存区域之间有任何关系。
Best Regards,
Jeanine
"Visual c++" forum will be migrating to a new home on
Microsoft Q&A !
We invite you to post new questions in the "Developing Universal Windows apps" forum’s new home on
Microsoft Q&A
!
For more information, please refer to the
sticky post.