gpt4 book ai didi

c - 我们如何轮询堆栈状态 - 未使用(可用)内存

转载 作者:可可西里 更新时间:2023-11-01 13:30:28 25 4
gpt4 key购买 nike

我们如何获得这些信息?我想这取决于操作系统,而且我运行的是 Windows,所以我的问题是指 Windows API。

是否有任何函数可以为我们做到这一点 - 为调用线程获取剩余的堆栈内存?

或者,如果我们能够找出以下详细信息,我们将能够自行计算:

  1. 获取线程堆栈基址。必须有一些函数将线程标识符作为参数,并返回有关它的一些信息(例如...堆栈基地址?)
  2. 获取线程堆栈大小。如果线程是由我们启动的,我们可以知道(因为我们在调用 CreateThread 时指定了它)。但是,如果它是操作系统为我们的程序启动的主线程,或者我们没有明确启动的任何其他线程,我们如何找到它?
  3. 获取当前堆栈指针。好吧,那更容易。我们可以使用 esp 检查它,或者获取局部变量的地址,以获得接近的位置。

这是出于教育目的,但我想它可以用来阻止递归算法导致堆栈溢出——而不是使用任何最大深度限制函数。

最佳答案

您可以使用 NtCurrentTeb(),它会为您提供指向 TEB 的指针。这有 NT_TIB 作为它的第一个成员:

typedef struct _NT_TIB
{
PEXCEPTION_REGISTRATION_RECORD ExceptionList;
PVOID StackBase;
PVOID StackLimit;
PVOID SubSystemTib;
// ....
} NT_TIB, *PNT_TIB;

关于c - 我们如何轮询堆栈状态 - 未使用(可用)内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8683335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com