更改程序中使用的缺省堆

常规内存管理功能 (malloc 等) 始终使用该线程的当前缺省堆。 所有 XL C/C++ 应用程序的初始缺省堆是 XL C/C++提供的运行时堆。但是,您可以通过调用 _udefault使自己的堆成为缺省堆。 然后,对常规内存管理函数的所有调用都将从堆而不是缺省运行时堆中分配内存。

缺省堆仅针对调用 _udefault的线程进行更改。 如果您选择,那么可以对程序的每个线程使用不同的缺省堆。 当您希望组件 (例如供应商库) 使用 XL C/C++ 缺省堆以外的堆时,这很有用,但实际上无法更改源代码以使用特定于堆的调用。 例如,如果将缺省堆设置为共享堆,然后调用调用 malloc的库函数,那么库将在共享内存中分配存储器。

由于 _udefault 返回当前缺省堆,因此您可以保存返回值,然后使用该返回值来复原您替换的缺省堆。 您还可以通过调用 _udefault 并指定 _RUNTIME_HEAP 宏 (在 umalloc.h中定义) ,将缺省值更改回 XL C/C++ 缺省运行时堆。 您还可以将此宏与任何特定于堆的函数配合使用,以从缺省运行时堆显式分配。