我正在做一个项目,我需要完全控制进程的地址空间。我需要将线程的堆栈从当前的位置移动到我选择的预定义区域,因为我需要释放原始堆栈内存。我找不到关于如何做到这一点的任何事情,只知道如何处理堆栈大小,但这不是我需要的。我有两个想法如何做到这一点,没有一个是理想的:
是否可以做这样的事情?它不必是相同的线程。
编辑:任何事情都可以解决原始堆栈并确定新/旧堆栈的新位置。因此,复制/移动堆栈,杀死旧线程并在预定义位置启动具有堆栈的新线程等应该可以。我不需要旧线程,我只需要一种方法来强制线程在某个位置运行(已经解决)并将其堆栈放在我决定的安全位置。所以在这种情况下丢弃旧的堆栈数据是好的,因为我现在不依赖它。
答案 0 :(得分:0)
如果你想释放系统分配堆栈,你就会打开一堆蠕虫。问题是您需要知道线程上方所有堆栈帧的结构。这些帧可以引用堆栈上的地址,因此删除它们可能会导致各种问题。
您可以创建一个具有1页堆栈的线程,而不是取消分配它。然后分配您自己的内存块并将其地址移动到堆栈指针寄存器中。在您的顶级线程例程中。