C++ 标准是否指定每个线程都有自己的堆栈?
Does the C++ Standard specify that every thread has its own stack?
从这个 question 我了解到每个线程都有自己的堆栈(这对我来说很有意义)。据我了解,每个线程都需要存储“进程指针”,以及一些变量,例如 return 地址,或者传递参数时。
不过,我想知道这种 c++ 代码行为的实现是否特定于某些操作系统,或者这是否是标准中描述的行为。如果是,我想知道在哪里可以阅读它(因为我尝试过但失败了)。
Does the C++ Standard specify that every thread has its own stack?
没有。事实上,C++ 标准甚至没有指定任何线程都有任何堆栈。仅提及堆栈(std::stack
除外)是对“堆栈展开”的提及,该名称是子条款之一中指定的进程的名称。
因此,与执行堆栈相关的任何内容都是语言实现的细节。但是,我不知道有线程的操作系统,但没有为每个线程单独的堆栈。
该标准没有将任何东西的存在指定为 low-level 作为“堆栈”(尽管它确实有一个名为“堆栈展开”的概念,因此对于如何实现某些东西有明确的期望) .
标准的作用是指定函数的行为。当您调用一个函数时,它指定该函数的局部变量 spring 在声明时存在,并且这些对象与同一函数的任何其他调用不同(除非它们是 static
).这就是允许递归工作的原因。
这意味着要实现函数调用,编译器必须做一些事情才能使所有这些按标准大纲工作。使用堆栈是它的 de-facto 标准实现,但标准并没有特别要求。
在不同线程中执行的同一函数具有彼此不同的局部变量(同样,除非它们是 static
),这仅仅是允许递归工作的同一事物的结果。
从这个 question 我了解到每个线程都有自己的堆栈(这对我来说很有意义)。据我了解,每个线程都需要存储“进程指针”,以及一些变量,例如 return 地址,或者传递参数时。
不过,我想知道这种 c++ 代码行为的实现是否特定于某些操作系统,或者这是否是标准中描述的行为。如果是,我想知道在哪里可以阅读它(因为我尝试过但失败了)。
Does the C++ Standard specify that every thread has its own stack?
没有。事实上,C++ 标准甚至没有指定任何线程都有任何堆栈。仅提及堆栈(std::stack
除外)是对“堆栈展开”的提及,该名称是子条款之一中指定的进程的名称。
因此,与执行堆栈相关的任何内容都是语言实现的细节。但是,我不知道有线程的操作系统,但没有为每个线程单独的堆栈。
该标准没有将任何东西的存在指定为 low-level 作为“堆栈”(尽管它确实有一个名为“堆栈展开”的概念,因此对于如何实现某些东西有明确的期望) .
标准的作用是指定函数的行为。当您调用一个函数时,它指定该函数的局部变量 spring 在声明时存在,并且这些对象与同一函数的任何其他调用不同(除非它们是 static
).这就是允许递归工作的原因。
这意味着要实现函数调用,编译器必须做一些事情才能使所有这些按标准大纲工作。使用堆栈是它的 de-facto 标准实现,但标准并没有特别要求。
在不同线程中执行的同一函数具有彼此不同的局部变量(同样,除非它们是 static
),这仅仅是允许递归工作的同一事物的结果。