我有一个与线程和进程的内存地址有关的问题。问题是:- 在正常的电话中,如
int func(int a, int b){
int c;
c = a + b;
return c;
}
int main(){
int ret = func(a,b);
return 0;
}
在函数func的上述函数调用中,函数变量a和b将存储在堆栈中。如果我错了,请纠正我。
现在另一种情况是我们从主进程创建线程。
void * func(void *dummy_ptr){
int c;
c = a + b;
pthread_exit();
}
int main(){
pthread_t id;
int ret = pthread_create(&id, NULL, & func(), NULL);
return 0;
}
我的问题是pthread_create的变量将被存储的位置。它是存储在主堆栈上还是存储在线程堆栈上。
答案 0 :(得分:1)
pthread_create
为堆中新线程的堆栈分配空间。因此func
中的变量存储在线程的堆栈中,该堆栈本身位于程序的堆中。
答案 1 :(得分:0)
变量pthread_t id
是main的本地变量,因此必须在main的堆栈上创建。
当main
完成执行时,
pthread_join
中没有main
等待线程终止。 main
退出导致所有其他线程abrubtly终止(kill)。