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