首页 > 试题广场 >

windows程序中多个线程下,栈和堆是公有的还是私有的(

[单选题]
windows程序中多个线程下,栈和堆是公有的还是私有的(  )
  • 栈私有,堆公有
  • 栈和堆均是私有的
  • 栈和堆均是公有的
  • 栈公有,堆私有
无论在任何环境下,多线程每个线程独自拥有一个栈区(私有),这是由栈和多线程的特性决定的;而在Windows环境下,堆区对于线程而言是公有的(同一进程内每个线程都可以共享)。

线程栈区私有:因为一个栈只有一个栈顶 top,那么我们假设不同线程共用一个栈,那么问题来了,假设当前线程需要进行出栈操作,那么它就会无法确定当前的栈顶元素是属于哪个线程的,是不是自己的。所以正因为栈只能对栈顶进行操作,且只有一个栈顶,所以不同的线程需要维护不同的栈(私有);
线程堆区公有:(注意这里的堆不是算法领域的堆,存储领域的堆只是一个连续自由空间)和栈不同,堆区是通过物理地址来访问存储单元的,堆区空间是自由分配的,每次申请堆空间时都会维护一个堆地址,这样,因为是使用地址访问的,所以不同的线程访问堆空间就不会产生冲突,堆空间完全可以共享(公有)。

最后需要强调的是,以上是针对同一个进程内的不同线程而言的。
发表于 2019-10-01 17:25:55 回复(0)
选A

发表于 2020-07-19 07:18:14 回复(0)
都公有的
发表于 2019-09-21 09:12:04 回复(0)