2012-03-06 79 views
4

我有一个关于POSIX线程堆栈大小夫妇的问题和他们的安全问题:POSIX线程堆栈内存 - 我们可以有不同的堆栈大小和安全问题吗?

A),我们可以有不同的堆栈大小(使用每个线程集:pthread_attr_getstacksize)?

B)当线程死亡(分离/退出)时,操作系统是否会收回其内存页?

C)如果一个线程碰巧在虚拟内存映射中彼此相邻,它是否可以继续写入另一个线程堆栈段?

回答

3

A)是的,当然,这就是pthread_attr_setstacksize的目的。 B)是的,调用pthread_detachpthread_join会导致线程资源在终止时被回收。

C)理论上是的,但是由于在大多数系统中堆栈向后(从高地址到低地址)增长,你必须做某种缓冲区溢出才能摆脱当前的堆栈空间。