Multithreading 堆栈在程序中的实现

Multithreading 堆栈在程序中的实现,multithreading,operating-system,stack,Multithreading,Operating System,Stack,我刚开始学习操作系统。我对斯塔克感到困惑。正如我发现的那样,堆栈连接到每个线程。这意味着堆栈的生命周期是在创建线程时,并在线程完成时回收。 同样从google搜索,参数和一些局部变量存储在线程中。但这些都是在编译时分配的,这似乎与前者冲突,前者认为堆栈附加到线程,并在线程完成后回收。 有人能给我一些详细的解释吗 参数和一些局部变量存储在线程中。但这些是在编译时分配的 这是不对的 当线程启动时,堆栈与该线程相关联。当线程终止时,该堆栈将被回收 举例说明为什么不能在编译时分配线程,想象一个程序提示用

我刚开始学习操作系统。我对斯塔克感到困惑。正如我发现的那样,堆栈连接到每个线程。这意味着堆栈的生命周期是在创建线程时,并在线程完成时回收。 同样从google搜索,参数和一些局部变量存储在线程中。但这些都是在编译时分配的,这似乎与前者冲突,前者认为堆栈附加到线程,并在线程完成后回收。 有人能给我一些详细的解释吗

参数和一些局部变量存储在线程中。但这些是在编译时分配的

这是不对的

当线程启动时,堆栈与该线程相关联。当线程终止时,该堆栈将被回收


举例说明为什么不能在编译时分配线程,想象一个程序提示用户启动多个线程,然后启动多个线程。编译器无法为该线程上运行的方法的参数或与该线程关联的本地存储分配存储。

您使用的行话令人困惑。你能给我们一个具体的例子来说明你的问题吗?嗨,Eric,根据你的解释,你的意思是参数和局部变量是在编译时声明的(只是确定了它的类型和大小),而初始化(比如内存分配)是在执行时进行的。这就是为什么参数和变量存储在附加到线程的堆栈中。我还可以问一个问题吗?如果全局变量和静态变量在编译时初始化并存储在堆中。但我认为堆是动态分配的。这似乎是一种冲突。编译器可以通过多种方式实现全局/静态变量。但是,没有真正的理由使用堆来实现它们。它们在整个项目期间都可用,并且其大小是已知的。它们可以在编译时提供地址,不需要任何动态内存管理。感谢您的澄清:)