0

在 C++ 编译的 EXE 中如何处理分配?如果您没有代码,分配管理器是否已融入应用程序,从而无法跟踪分配/取消分配?或者是否有 WinAPI 调用或类似的内存分配?

4

3 回答 3

3

通常,分配功能由您的C 运行时库提供。该库又是由您的供应商编写的。Microsoft 的 Visual C++ 可能会使用 Windows 内核例程来实现分配,但您应该查看文档和/或询问您的供应商。

于 2013-01-28T15:54:57.057 回答
3

通常两者都有。普通代码通过标准库中内置的堆管理器分配内存。反过来,这会从操作系统分配更大的内存块,然后允许其余代码从那个大块中分配更小的内存。

堆管理器是否实际在应用程序中取决于它是如何编译和链接的。如果它在 DLL 中使用标准库,那么它将使用标准库 DLL 中的代码。如果它静态链接到标准库,那么堆管理器代码将链接到可执行文件本身。

于 2013-01-28T15:57:01.690 回答
3

内存分配的基础确实是一些 WinAPI 调用(通常是功能)。这些被“隐藏”在operator newandmalloc和其他相关功能的后面。您应该能够识别对堆函数的调用,但在原始堆和实际内存分配调用之间可能有几层函数。

编辑:显然,如果程序被编译为使用 C 运行时作为 .DLL,则实际执行分配的代码根本不在可执行文件中 - 它会在 DLL 中。

当然,编写代码的程序员很可能: 1. 没有使用 C/C++,在这种情况下,所有的赌注都没有了。2. 以某种方式编写自己的内存管理版本,例如使用VirtualAlloc

于 2013-01-28T15:58:34.790 回答