new、GlobalAlloc、LocalAlloc有什么区别吗?
解决方案 »
- matcom实时曲线的问题
- 给一开始IP,一结束IP,求其中的所有IP
- 关于WSAEventSelect的一个socket阻塞的问题
- 50!请问,我是否可以指定CFrameWnd来显示一个已经创建好的View?
- 请问能否将游戏默认的上下左右键改成鼠标的移动
- 如何在程序中转换数据库的字符集?
- 如何将setup.exe做成一个文件就搞定了
- socket api
- 我像写一个DLL的程序,需要注意那些问提,导入道出如何实现等等。来者有分
- 如何学习SDK,请高手推荐几本好书。
- 关于inconsistent dll linkage. dllexport assumed.的警告如何解决?
- declspec(novtable)的问题!!!
而GlobalAlloc、LocalAlloc是windows的API,只能在Windows中使用,
LocalAlloc仅是为了保持兼容性而保留下来的,
GlobalAlloc、LocalAlloc在NT内核中已经没有区别了.
globalalloc用globalfree来释放,
区别估计也就是1楼说的,来源不同,生存期上好像也没有什么区别吧
由于每个进程的局部堆很小,所以在局部堆中分配内存会受到空间的限制。但这个堆是每个进程私有的,相对而言分配数据较安全,数据访问出错不至于影响到整个系统。
而在全局堆中分配的内存是为各个进程共享的,每个进程只要拥有这个内存块的句柄都可以访问这块内存,但是每个全局内存空间需要额外的内存开销,造成分配浪费。而且一旦发生严重错误,可能会影响到整个系统的稳定。
不过在Win32中,每个进程都只拥有一个省缺的私有堆,它只能被当前进程访问。应用程序也不可能直接访问系统内存。所以在Win32中全局堆和局部堆都指向进程的省缺堆。用LocalAlloc/GlobalAlloc分配内存没有任何区别。甚至LocalAlloc分配的内存可以被GlobalFree释放掉。所以在Win32下编程,无需注意Local和Global的区别,一般的内存分配都等效于HeapAlloc(GetProcessHeap(),...).new是一个宏, 调用new,相当于先用malloc,分配内存,然后嗲用类的构造函数,初始化这段内存