我目前正在研究malloc
我的作业的实施。
我知道存在一些版本的 malloc 实现,例如 glibc 使用的 ptmalloc 和 FreeBSD 使用的 jemalloc。
我想知道visual C++采用的是哪个版本的实现?还是 VC++ 团队刚刚实现了他们自己的版本?
我目前正在研究malloc
我的作业的实施。
我知道存在一些版本的 malloc 实现,例如 glibc 使用的 ptmalloc 和 FreeBSD 使用的 jemalloc。
我想知道visual C++采用的是哪个版本的实现?还是 VC++ 团队刚刚实现了他们自己的版本?
当你调用VC++ 编译malloc
的new
程序而不编写自己的重定向器时,你最终会进入HeapAlloc
,也称为 NT 堆。
NT Heap 是由 Windows 内存团队开发的。这些人负责操作系统中的所有内存管理。他们为用户模式进程分配虚拟空间;他们为驱动程序处理内存等。同一个团队为应用程序代码中的小分配提供代码是合乎逻辑的。根据我的经验,NT堆是个好东西。它没有任何重大缺陷。当您有非常具体的要求时,其他一些分配器可能会执行得更好。在一般情况下,NT 堆是正确的起点。它很可能会满足您的需求。
请注意,VC++ 是一个编译器。它创建一个在操作系统控制下运行的可执行文件。谈论任何“VC++ 执行环境”都是不正确的。
尽管如此,我知道编译器本身在编译代码时并没有使用 NT 堆。他们使用自己的分配器。我不知道他们这样做的确切原因。