首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

HeapALloc分配失败?MSDN解释跟new的实现矛盾

2013-01-01 
HeapALloc分配失败?MSDN解释和new的实现矛盾?下面两段话是不是矛盾?1、MSDN上的解释为:HeapALloc是从堆上分

HeapALloc分配失败?MSDN解释和new的实现矛盾?
下面两段话是不是矛盾?

1、MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的空间利用起来,从而导致分配失败)


2、调用关系如下     new->malloc->HeapAlloc->VirtualAlloc->驱动程序的_PageAlloc。   
    上面的调用关系是一般的WIN32编译器的调用顺序。   
    其中HeapAlloc已经实现了malloc的那些小块内存管理,以Heap开头的有一系列函数,你会发现它与malloc/free等可以对应起来。   


按照new的实现,heapalloc不会因为找不到连续的空间而分配失败
而按照MSDN的解释,heapalloc不能将其他零散的空间利用起来,导致分配失败。

VirtualAlloc分配虚拟内存,new每次都是先从分配磁盘开始,然后再提交到物理内存这样?
[解决办法]
HeapAlloc是逻辑上不能离散,_PageAlloc是物理上不能离散,
VirtualAlloc把离散的物理存储变成连续的逻辑存储。
new->malloc这两个是编译器的实现,其它的是操作系统的事。

热点排行