草庐IT

HeapCreate

全部标签

windows - HeapCreate 和 HeapAlloc 混淆

我正在做一个关于动态内存管理的项目。我对HeapCreate和HeapAlloc函数感到困惑。对于HeapCreate()函数,我们可以创建一个堆,该函数将返回一个HANDLE。我们可以初始化堆的大小。假设winHandle=HeapCreate(0,2*1024,0);然后,我可以使用HeapAlloc函数在这个堆上进行分配。但是我对堆的大小感到困惑。我试了一个例子,我在这个堆上调用了HeapAlloc(winHandle,0,1024)两次,所以总数将是2*1024。但是我仍然可以多次调用HeapAlloc而不会遇到错误。假设我调用了HeapAlloc(winHandle,0,10

c++ - 什么时候使用HeapCreate函数或者什么情况下需要堆的数量?

WindowsAPI有一组用于堆创建和处理的函数:HeapCreate、HeapAlloc、HeapDestroy等。我想知道程序中另一个堆有什么用?从碎片的角度来看,您将获得外部碎片,其中内存未在堆之间重用。所以即使使用低碎片堆,仍然存在碎片。附加堆的内存管理似乎是低级的。所以它们不容易使用。此外,可以使用从堆分配和管理分配的内存来模拟额外的堆。那么有什么用呢?你用过吗? 最佳答案 一个用例可能是一个长时间运行的复杂进程,它执行大量内存分配和释放。如果用户想要中断进程,那么清理当前分配的内存的一种简单方法可能是将所有内容都放在私有

c++ - HeapCreate,Linux 中的 HeapAlloc,Linux 的私有(private)分配器

在Windows中,对于要求非常高的应用程序,程序员可以使用HeapCreate和HeapAlloc来更好地管理和控制内存分配-加快速度(也称为私有(private)分配器)。Linuxc++编程中的等价物是什么? 最佳答案 如果你想使用你自己的私有(private)分配器,然后使用mmap()将一定量的内存映射到你的进程中,然后你可以随意使用该内存。打开/dev/zero的文件描述符,然后将其用作mmap()的“fildes”参数。有关要传递的参数的完整详细信息,请参见manmmap。在这方面,mmap()与HeapCreate(