malloc 是C运行库函数,进行的是物理内存的分配,
vittualalloc是api,进行的是虚拟内存的分配。根据传递的参数的不同,有不同的行为,
可以在虚拟地址中保留一段区域(但并没用将折断虚拟区域映射到物理内存),或者将一段虚拟地址区域映射到物理内存。关于VirtaulAlloc的详细用法可察看msdn.

解决方案 »

  1. malloc()是申请实存的,VirtualAlloc()是申请虚存的,
    前者用free()释放,后者用VirtualFree()释放。
      

  2. malloc之后就已分配内存,virtualalloc可以保留和提交一块内存区域,保留是指在进程的虚拟地址空间内分配一段地址给应用程序,此时并没有真正分配内存空间,也就是说他允许应用程序保留一块虚拟的地址空间而不用消耗内存,直到真正要用的时候提交,这时再分配物理内存,另外用virtualalloc分配的空间自动初始化为零
      

  3. 大家都不要误人子弟了吧,有时间看看《windows 核心编程》或者 《windows 高级编程》(第三版)吧,上面说得很清楚
      

类似问题 »