对于 Windows 来说,每个线程的栈都是独立的,默认的栈大小是 1MB。在分配完 exe、dll、各种栈之后,Windows 的进程空间已经是支离破碎了, 当程序向系统申请一个空间的时候,只能够从这些剩下的没有被占用的地址上分配

VirtualAlloc 向系统预留一块虚拟地址

但在使用 VirtualAlloc 申请空间的时候,系统要求空间大小必须为 page 的整数倍,因此有堆管理器来专门实现节省内存的空间分配算法

  • HeapCreate
  • HeapAlloc
  • HeapFree
  • HeapDestory