2013-06-12 3 views
0

У меня есть вопрос, связанный с адресом памяти потока и процесса. Вопрос заключается в том: - В обычном вызове какАдрес стека для Thread и основного процесса

int func(int a, int b){ 
    int c; 
    c = a + b; 
    return c; 
}   

int main(){ 
    int ret = func(a,b); 
    return 0; 
} 

В приведенном выше вызове функции к функции FUNC, функция переменной а и Ь будут храниться в стеке. Пожалуйста, поправьте меня, если я ошибаюсь.

Теперь другая ситуация возникает, когда мы создаем потоки из основного процесса.

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. Будет ли он храниться в Stack main или в стеке потока.

+0

Ваши примеры не будут компилироваться, так как вы пропустили объявление 'a' и' b'. – alk

ответ

1

pthread_create выделяет пространство для стека нового потока в куче. Таким образом, переменные внутри func хранятся в стеке потока, который сам находится в куче программы.

+1

Да, это правильно. Для переменной функции func(), которая вызывается внутри pthread_create api, переменные будут храниться в стеке потока, но как насчет переменных, которые мы передаем в API pthread_create(), например pthread_t id, Any thread атрибуты и последний аргумент передаются как некоторые целые или структурные указатели. – Prak

0

Переменная pthread_t id является локальной для основного, поэтому ее необходимо создать в стеке основного.

Когда main заканчивает выполнение и

  • Вы не имеете pthread_join в main ждать, пока поток не прекращается.
  • Нить не отсоединяется.

main выходы, приводящие к тому, что все другие нити прекращаются безучастно (убивают).

Смежные вопросы