我想了解用户级线程堆栈的内存如何保存在内存中。我认为所有堆栈都会从页面边界开始......我是对的吗?用户级线程库如何确保某个线程的堆栈不会增长并与其他线程的连续页面边界堆栈重叠,因为所有堆栈页面都是连续的......
如果您坚持使用连续的堆栈,那么是的,为单独线程分配的堆栈之间可能会发生冲突。在虚拟空间较小的机器上,这种情况比在虚拟空间较大的机器上更有可能发生,并且当某些堆栈可以变得任意大时,这种情况更有可能发生。
最常见的操作系统(Windows、Linux)假设线程堆栈不能很大(例如 1-10Mb),并且单个进程不能有很多线程(可能是数百个)。在这种情况下,如果您在计算状态之前知道需要多少个线程以及每个堆栈可以有多大,那么您就不会真正遇到问题。在这种情况下,您可以预先计算所有线程堆栈的放置位置,以便它们都适合,并且每个堆栈都有最坏情况的需求。
这很有效......非常好。但是,如果对堆栈的需求可以任意大,或者您事先不知道有多少个堆栈,那么预分配就不起作用。这确实会给使用这些操作系统的人带来麻烦。
See 为什么堆栈溢出仍然是一个问题? https://stackoverflow.com/questions/3217521/why-are-stack-overflows-still-a-problem来讨论这个问题。您也可以阅读我关于如何避免该问题的回复。 (提示:堆栈大小没有限制!)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)