malloc,new是不是都是通过VirtualAlloc实现的?
我发现malloc得到的内存指针不可以通过GlobalHandle来得到句柄, 返回结果还是指针的值。
下面这几行代码
运行的结果是:
hMem=4398480
p1=4398480,新指针=2105145884
Press any key to continue
我发现,这个hMem和p1的值是相等的,但是接下来GlobalLock(hMem)却可以返回一个新的指针的值。那么这个新的指针的值又代表了什么内容呢?
为什么和p1不相等?
下面这几行代码
int main(int argc, char* argv[])
{
char* p1=(char*)malloc(2);
HANDLE hMem=GlobalHandle(p1);
if(NULL==hMem)printf("error:%d\n",GetLastError());
else printf("hMem=%d\n",hMem);
printf("p1=%d,新指针=%d\n",(UINT)GlobalLock(hMem));
return 0;
}
运行的结果是:
hMem=4398480
p1=4398480,新指针=2105145884
Press any key to continue
我发现,这个hMem和p1的值是相等的,但是接下来GlobalLock(hMem)却可以返回一个新的指针的值。那么这个新的指针的值又代表了什么内容呢?
为什么和p1不相等?
...全文
相关推荐
申请内存区别new malloc HeapAlloc VirtualAlloc
申请内存区别new malloc HeapAlloc VirtualAlloc,很多时候内存分配影响着程序性能,本例通过源代码显示这几个函数的本质。
Windows下动态内存分配方式
"动态内存"包含以下两个方面的内容: 1.内存。这里的"内存"指的是进程的虚拟内存空间。在Win32环境下,每一个进程拥有独立的,大小为4G(0x0000 0000 ~ 0xFFFF FFFF)的虚拟内存空间。 2.动态。这里的"动态"指的是进程虚拟内存空间中的动态内存区域。在一个进程的虚拟内存空间中,只有动态内存可以在运行是被应用程序自由的分配/使用/释放。
《对话框》之《内存分配方式和调试机制》
10. 内存分配方式和调试机制 1. M内存分配 1. 内存分配函数 MFCWin32或者C语言的内存分配API,有四种内存分配API可供使用。 1. Win32的堆分配函数 每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。
内存分配方式和调试机制.doc
内存分配方式和调试机制.doc 还可以啊!
WindowsAPI函数存储管理.rar_内存管理_内存管理函数
这是一个用API函数编写的操作系统的内存管理的程序的实现


