关于进程与线程堆栈的有关问题

关于进程与线程堆栈的问题
各位大神,能不能解说一下
(1)当一个父进程创建多个子线程后,子线程的堆空间和栈空间是在父进程的堆栈空间中开辟的呢,还是在父进程内存空间之外的内存空间为各个子线程开辟了空间呢?
(2)每个子线程都有一个对应自己的栈空间,这个栈空间与父进程的栈空间有什么关系啊?
(3)多个子线程是共享父进程的对空间的?怎么个共享方法呢?每个子线程共享同一首地址开始的内存空间,这不太可能吧?
(4)“进程可以创建多个子线程,这些子线程共享相同的内存地址空间”这是书上的一句话,能不能解释一哈,什么叫做共享相同的内存地址空间啊?
(5)“父进程的多个子线程从同一堆中分配对象”,什么意思啊?从同一堆中分配什么对象啊?

谢谢大神的解释,感激不尽!
线程 进程 内存

------解决方案--------------------
1、进程的地址空间
每个进程的地址空间是独立的,是操作系统把物理内存映射到进程的虚拟地址上。
通俗的理解:如果有a.exe和b.exe同时在系统中运行,那么a和b都可以有0x00000000-0xffffffff的虚拟地址空间(不考虑操作系统占用等因素)。
假如a b都有1个变量在地址 0x12345678处,看起来地址一样,实际上在物理内存中不是一个地方。
进程只能访问自己的地址空间,不能访问别的进程的地址空间。
2、进程是线程的容器,windows调度运行的单位是线程,一个进程至少有1个主线程。一个进程内所有的线程都处于同一个虚拟地址空间。
3、进程初始化的时候,系统会在进程的地址空间中创建一个堆,叫进程默认堆。进程中所有的线程共用这一个堆。当然,可以增加1个或几个堆,给不同的线程共同使用或单独使用。
4、创建线程的时候,系统会在进程的地址空间中分配1块内存给线程栈,通常是1MB。线程栈是独立的,不共享。

搞清进程和线程、堆和栈的区别,再结合上面4点说明,你的5个问题很容易理解了。
------解决方案--------------------
1 从创建一个新的进程开始,子进程就会复制一份父进程的内存空间过来的,
  如果是创建线程的话,就是共用了!没有拷贝!
  注意进程,和线程完全不同的概念!
2 栈空间都是自己分配管理的吧,没有什么联系!

看看进程和线程吧,然后看看内存管理!
感觉你是想说父子进程的关系,但是你又是说线程!

------解决方案--------------------
这对不同操作系统是不同的,windows是基于线程的,进程不过是个线程和其他资源的容器,系统的调度单位是线程,每个线程有独立的栈!
对进程来说
堆属于进程这个容器!
栈属于线程这个运行单元

linux等系统,进程是系统的调度单元,线程不过是轻量级的进程而已!

------解决方案--------------------
WinDbg
  
 Debugging Tools for Windows 
k, kb, kc, kd, kp, kP, kv (Display Stack Backtrace)
The k* commands display the stack frame of the given thread, together with related information..

Syntax
User-Mode

[~Thread] k[b
------解决方案--------------------
p
------解决方案--------------------
P
------解决方案--------------------