4
我有一个关于POSIX线程堆栈大小夫妇的问题和他们的安全问题:POSIX线程堆栈内存 - 我们可以有不同的堆栈大小和安全问题吗?
A),我们可以有不同的堆栈大小(使用每个线程集:pthread_attr_getstacksize)?
B)当线程死亡(分离/退出)时,操作系统是否会收回其内存页?
C)如果一个线程碰巧在虚拟内存映射中彼此相邻,它是否可以继续写入另一个线程堆栈段?
我有一个关于POSIX线程堆栈大小夫妇的问题和他们的安全问题:POSIX线程堆栈内存 - 我们可以有不同的堆栈大小和安全问题吗?
A),我们可以有不同的堆栈大小(使用每个线程集:pthread_attr_getstacksize)?
B)当线程死亡(分离/退出)时,操作系统是否会收回其内存页?
C)如果一个线程碰巧在虚拟内存映射中彼此相邻,它是否可以继续写入另一个线程堆栈段?
A)是的,当然,这就是pthread_attr_setstacksize
的目的。 B)是的,调用pthread_detach
或pthread_join
会导致线程资源在终止时被回收。
C)理论上是的,但是由于在大多数系统中堆栈向后(从高地址到低地址)增长,你必须做某种缓冲区溢出才能摆脱当前的堆栈空间。