C++ 管理堆内存

C++ 管理堆内存,c++,windows,winapi,memory-management,C++,Windows,Winapi,Memory Management,我正在为windows做一个特殊的软件,它需要同时使用两个堆,原因有很多 我读过这篇文章,它描述了如何创建和使用新的堆 编译器创建了一个称为默认堆的堆,这是我们在C/C++中调用new和malloc时都使用的堆 我的问题是,是否可以将新堆设置为默认堆,以便所有使用内存分配的函数调用都使用此堆而不是原始堆?然后,当我需要它时,切换回原始版本 我知道这看起来很棘手,但我需要处理这个问题,以避免在硬件中断期间出现堆损坏 提前感谢,, Martin您100%确定在切换期间执行的所有分配也将被解除分配,并

我正在为windows做一个特殊的软件,它需要同时使用两个堆,原因有很多

我读过这篇文章,它描述了如何创建和使用新的堆

编译器创建了一个称为默认堆的堆,这是我们在C/C++中调用new和malloc时都使用的堆

我的问题是,是否可以将新堆设置为默认堆,以便所有使用内存分配的函数调用都使用此堆而不是原始堆?然后,当我需要它时,切换回原始版本

我知道这看起来很棘手,但我需要处理这个问题,以避免在硬件中断期间出现堆损坏

提前感谢,,
Martin

您100%确定在切换期间执行的所有分配也将被解除分配,并且没有代码会尝试解除分配在切换之前分配的内存?不太可能,你能保证。它听起来坏了。但是C++允许重写<代码>新< /C>,设置分配器等,这有助于减轻你的问题。戴维,是的,只是为了执行一个线程中的函数调用。然后切换回正常状态。如果在malloc期间发生中断,并且我想在trap函数中再次调用malloc(在用户空间上下文中),进程中堆的某些内部可能已损坏。其他线程将在调用特殊线程的同时调用malloc、free等。您可以强制使用定制内存管理器,根据调用线程的标识,该管理器的行为会有所不同。当然,最好安排代码不损坏堆。所以,不要在陷阱中使用堆分配。这是解决问题的正确方法。哦,天哪,这将打破内存分配之外的许多东西。首先,线程不仅运行代码,还运行操作系统代码;如果你打断它,运行用户代码,而用户代码调用任何操作系统函数——好吧,这将是不好的。所以不要那样做。线程在Windows中不可中断。