Освобождение памяти потока - PullRequest
1 голос
/ 24 августа 2011

При создании потока он выделяет свое собственное хранилище для локальных переменных и т. Д. Когда или как он возвращается в память для повторного использования: когда поток заканчивается?

Когда поток пытаетсявыделить динамическое хранилище, оно все еще хранится в локальном хранилище потока или в глобальном хранилище?

Ответы [ 4 ]

2 голосов
/ 24 августа 2011

Локальное хранилище для потока из стека, поэтому вам не нужно его освобождать.просто конец потока в порядке.

А динамическое хранилище из кучи, поэтому вы должны освободить выделенную память.

0 голосов
/ 24 августа 2011

Потоки выделяют локальное хранилище в стеке для данных функций или в специальном TLS (локальном хранилище потоков) для глобальных локальных потоков.Все, что выделено потоком в куче, остается в явном виде свободным () d.

0 голосов
/ 24 августа 2011

Ну, это зависит. Если поток отсоединен, вам не нужно очищать ресурсы потока, когда поток заканчивается. Если поток не отсоединен, вам может (я не уверен насчет специфики Solaris) необходимо вызвать pthread_join или что-то в этом роде, чтобы очистить ресурсы потока. Конечно, вам нужно очистить TLS и динамическое хранилище.

0 голосов
/ 24 августа 2011

Помните - есть также "локальное хранилище потоков" (также известное как "TLS"). Это не зависит ни от кучи («new» или «malloc ()»), ни от локальных переменных. Как и в куче, ваше приложение будет явно выделять TLS и явно освобождать его.

...