【发布时间】:2016-03-13 21:39:23
【问题描述】:
我了解进程内存布局(代码、数据、堆、堆栈)的外观。
但是,我不明白多线程程序的内存布局到底是什么样的。
毕竟,进程只有一个堆栈,所以我会假设所有线程都以某种方式共享同一个堆栈.. 但这似乎不对,因为每个线程都有自己的堆栈,并且线程并不能保证按照它们被调用的顺序执行,因此将它们一一放入进程堆栈对我来说没有多大意义。
我在网上看到这张图:
这里似乎每个线程都有自己的堆栈,这是有道理的,还有自己的内核堆栈。
这是否意味着我有(使用图片)3 个“进程”? (假设一个进程地址空间是 4GB,那么 3 个线程将是 12GB?我认为不是..)
我想了解每个线程的堆栈在内存中的位置。
我知道所有线程共享数据和代码段,所以我会假设堆将包含线程的堆栈,或者它们将位于内核空间中。..
我真的很想知道会发生什么..
非常感谢。
【问题讨论】:
-
一个线程的栈通常在 1MB 左右。只要您不创建数千个进程,使其适合一个进程的地址空间就没有问题。请注意,右图具有误导性,用户堆栈是用户地址空间的一部分。它的分配方式是您永远不必担心的操作系统实现细节。
标签: multithreading memory layout process