gpt4 book ai didi

c++ - 独立堆栈空间对线程的重要性

转载 作者:行者123 更新时间:2023-11-28 02:56:15 25 4
gpt4 key购买 nike

我早就知道每个线程都有独立的堆栈空间,但共享堆内存。

但我最近发现了一些代码,让我质疑这到底是什么意思。
这是代码的简化版本:

void SampleFunction()
{
CRemoteMessage rmessage;
rMessage.StartBackgroundAsync(); // Kickoff a background thread.

/* Do other long-running work here...
* but don't leave function SampleFunction
*/

rMessage.GetReply(); // Blocks if needed, but the message-background is mostly done by now.
rMessage.ProcessReply();
}

在这段代码中,rmessage 是一个本地堆栈变量,但大部分时间都在后台线程中。这样安全吗??后台线程究竟如何访问该线程的堆栈变量?

最佳答案

一般来说,栈和堆是线程间可以共享的内存空间的一部分。没有人会阻止您共享堆栈寻址变量。

然而,每个线程都有自己的一组寄存器,包括堆栈指针(和派生的),因此如果需要,您可以维护单独的堆栈(否则不可能),因此线程可以调用函数并做任何他们需要的事情。如果需要,您可以选择打破这种分离。

关于c++ - 独立堆栈空间对线程的重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21919125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com