2009-11-10 43 views

回答

14

堆內存總是。

全局變量取決於平臺,通常它們是共享的。

堆棧是線程特定的,以及寄存器。

+0

在linux上共享? – Algific 2009-11-10 21:21:41

+0

@data_jepp是的,在Linux上共享。如果你想擁有線程本地的「全局」變量,你可以使用pthread_ *函數分配線程本地存儲。 – 2009-11-10 21:33:15

1

這取決於語言和線程的實現。例如,我不認爲即使C可以讓你直接訪問CPU寄存器,所以不管pthreads是否共享寄存器(這在記錄中,我相當肯定它沒有),都是很不實際的。同樣在C中,全局變量是而不是實際上是在堆上分配的,儘管它們可能是其他語言。

堆棧更復雜。在C/pthreads中,每個線程都有自己的堆棧,但在其他語言和線程模型中,情況可能會更加複雜,因爲底層堆棧模型可能並不那麼簡單。

+0

您可以使用C語言中的內聯彙編來訪問寄存器,但它會開始失去它的名稱「便攜式彙編」。 – NVRAM 2009-11-10 21:35:38

0

堆棧:沒有

寄存器:沒有

堆:是的(如果你要選擇y或n,真正的答案是它依賴)

全局:是

0

的全局值和堆內存在多線程進程中共享。寄存器值和堆棧內存對每個線程都是私有的。