我对C中的多线程是新手,想知道如何在线程间共享函数中声明的共享(非全局和非静态)变量。我知道,我们可以像线程如何知道共享变量的地址
a = (int *)malloc(sizeof(int));
声明像
int a;
或动态的既简单变量共享data.But,目前尚不清楚什么对我是如何在各种情况下的编译器行为?
1)它是否将在其线程堆栈内创建的变量的地址赋予其他线程?
2)如何动态分配变量?它的指针是否广播?或者指针保存在.DATA或.BSS中的某个地方?
在此先感谢
我不是一个熟练的人,但我认为在单个OS进程中,所有线程共享相同的内存映射。在一个线程上分配的内存不在不同的位置,或者以不同的方式进行管理,从分配在任何其他线程上的内存中,对吗?我意识到需要做的唯一的区别是单线程公寓(STA),其中需要一些限制来控制哪些函数被允许操纵在这些线程中创建的资源(窗口,图形对象等)在另一个... – 2014-10-20 16:22:30
每个线程都有自己的堆栈,但共享堆。 – user3684042 2014-10-20 16:28:38
但是,不是每个线程的堆栈仍然是由OS发布到所有线程驻留的进程所在的同一内存映射的一部分吗?即如果一个线程具有来自另一个线程的变量的虚拟地址,则它不需要对操作系统进行“thunk”以获得实际的物理地址来访问它。 – 2014-10-20 16:35:10