请问 HeapAlloc 和 new
请教 HeapAlloc 和 new
请教这两函数的区别?什么情况下用哪个比较好?
------解决方案--------------------
请注意new不是函数而是操作符。
------解决方案--------------------
GlobalAlloc是标准内存管理函数,标准内存管理函数都是操作进程的默认堆,所以这个函数是从进程的默认堆中分配内存空间,分配的空间可以是可移动的也可以是不可移动的。可移动的内存是指Windows在需要的时候可以将这个内存移动到另外一个地址.
HeapAllock是堆管理函数,堆管理函数可以操作非默认堆(当然也可以操作默认堆),创建一个堆是用HeapCreate,这个函数返回一个堆句柄,然后可以用在HeapAllock函数中,即从返回的这个堆中申请内存空间,HeapAllock申请的内存只能是不可以移动的.
而new则是c++的标准函数,在Windows的VC++编译器中,new在申请内存时最终调用的是GlabalAlloc,不过new还可以调用类的构造函数.
Windows的内存管理除了标准内存管理函数和堆管理函数之外,还有更加底层的虚拟内存管理函数,VirtualAlloc就是一个虚拟内存管理函数.
------解决方案--------------------
new操作符。。。。。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
看看STL源码剖析和C++内存管理,里面有对New和Heapalloc的讲解,STL源码剖析里有对Alloc详细的代码设计
------解决方案--------------------
我与2楼的看法有些不同,GlobalAlloc是从16位系统遗留下来的函数,保留这个函数的目的主要是为了和16位程序兼容,另外这个函数还有一些特殊的用途,例如剪贴板函数用它在进程间共享内存。这个函数在16位程序中的用途就是为了分配在进程之间共享的内存。32位程序一般都是使用用HeepAlloc的。
默认情况下,new被转发到系统的堆函数,但这个函数不是GlobalAlloc而是HeapAlloc.
------解决方案--------------------
new就是个c++语言的操作符,最后的实现还是得靠HeapAlloc的。
HeapAlloc是系统分配堆的入口,malloc,new之类的实现都可以用它
请教这两函数的区别?什么情况下用哪个比较好?
------解决方案--------------------
请注意new不是函数而是操作符。
------解决方案--------------------
GlobalAlloc是标准内存管理函数,标准内存管理函数都是操作进程的默认堆,所以这个函数是从进程的默认堆中分配内存空间,分配的空间可以是可移动的也可以是不可移动的。可移动的内存是指Windows在需要的时候可以将这个内存移动到另外一个地址.
HeapAllock是堆管理函数,堆管理函数可以操作非默认堆(当然也可以操作默认堆),创建一个堆是用HeapCreate,这个函数返回一个堆句柄,然后可以用在HeapAllock函数中,即从返回的这个堆中申请内存空间,HeapAllock申请的内存只能是不可以移动的.
而new则是c++的标准函数,在Windows的VC++编译器中,new在申请内存时最终调用的是GlabalAlloc,不过new还可以调用类的构造函数.
Windows的内存管理除了标准内存管理函数和堆管理函数之外,还有更加底层的虚拟内存管理函数,VirtualAlloc就是一个虚拟内存管理函数.
------解决方案--------------------
new操作符。。。。。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
看看STL源码剖析和C++内存管理,里面有对New和Heapalloc的讲解,STL源码剖析里有对Alloc详细的代码设计
------解决方案--------------------
我与2楼的看法有些不同,GlobalAlloc是从16位系统遗留下来的函数,保留这个函数的目的主要是为了和16位程序兼容,另外这个函数还有一些特殊的用途,例如剪贴板函数用它在进程间共享内存。这个函数在16位程序中的用途就是为了分配在进程之间共享的内存。32位程序一般都是使用用HeepAlloc的。
默认情况下,new被转发到系统的堆函数,但这个函数不是GlobalAlloc而是HeapAlloc.
------解决方案--------------------
new就是个c++语言的操作符,最后的实现还是得靠HeapAlloc的。
HeapAlloc是系统分配堆的入口,malloc,new之类的实现都可以用它