【发布时间】:2016-06-28 00:19:54
【问题描述】:
我正在做一些试验,想知道是否可以在我提供的特定地址创建一个线程堆栈,或者至少让线程堆栈只在我可以指定的一些(巨大的)虚拟内存区域内产生.
我对此感兴趣的原因是我想在某个时候将整个堆栈复制到远程进程,并且需要指针保持完整,并且线程堆栈不会发生冲突。
我知道,这可能不是最好/最安全的方法,但这只是一个小爱好项目。如果您知道如何在 Linux 上执行此操作,我也对此感兴趣。
【问题讨论】:
-
嗯...您确实知道系统管理的内存(例如堆栈)会移动,并且您的指针可能在线程生命周期结束时无效,对吗?此外,您知道堆栈中的所有内存都将在线程退出的那一刻被释放和回收(因此没有一个是有效的,并且在您获得它时另一个进程可能正在使用它)......对吗?
-
可惜你不在 POSIX/Unix/Linux/WhateverBSD 上,你本可以使用 pthread_attr_setstackaddr(3)...
-
@Myst System 不能也不会移动堆栈。如果这样做,所有指针都将无效。对象的整个生命周期都具有相同的地址。
-
即使 if 你可以为你的堆栈分配一个特定的地址,这不会让你更接近你想要解决的任何问题。堆栈上的值可以是任何东西:屏幕坐标、GDI 对象句柄、文件指针、内核对象句柄、动态分配对象的指针等等。将此数据复制到外部进程会使其无法使用。
-
大声笑,移动虚拟内存,堆栈等。我的应用程序都不会运行超过几毫秒:)
标签: c windows multithreading winapi memory