2014-04-05 56 views
-1

我剛開始學習操作系統。我對堆棧感到困惑。正如我發現堆棧被連接到每個線程。這意味着堆棧的生命是在創建線程時並在線程完成時被回收。 也從谷歌搜索,參數和一些局部變量存儲在線程中。但是這些是在編譯時分配的,這似乎與前者相沖突,即堆棧附加到線程並在線程完成後回收。 任何人都可以給我一些細節的解釋?程序中的堆棧實現

+1

你用混淆的方式使用行話。你能向我們展示一個你問什麼的具體例子嗎? –

回答

0

參數和一些局部變量存儲在線程中。但是這些是在編譯時分配的

這是不正確的。

當線程啓動時,堆棧與該線程關聯。當線程終止時,該堆棧將被回收。

有關爲什麼在編譯時無法分配的示例,想象一個程序,該程序提示用戶啓動一些線程,然後啓動該線程數。編譯器無法爲該線程上運行的方法或與該線程關聯的本地存儲的參數分配存儲空間。

+0

您好埃裏克,根據你的解釋,你的意思是參數和局部變量是在編譯時聲明(只是確定它的類型和大小),而它的初始化(如內存分配)發生在執行時。這就是爲什麼參數和變量存儲在附加到線程的堆棧中的原因。 – user3500089

+0

也可以再問一個問題嗎?如果全局變量和靜態變量在編譯時初始化並存儲在堆中。但我認爲堆動態分配。這似乎是一個衝突。 – user3500089

+1

編譯器可以通過多種方式實現全局/靜態變量。但是,沒有真正的理由使用堆來實現它們。它們可用於整個程序的整個過程,並且它們的大小是已知的。可以在編譯時給它們一個地址,並且不需要任何動態內存管理。 –