與線程“綁定”的是棧,用於存儲自動變量。每一個線程建立的時候,都會新建一個默認棧與之配合。堆則是通常與進程相關,用於存儲全局性的變量,進程建立的時候,會建立默認堆。於是,每一個線程都有自己的棧,然后訪問共同的堆。當然,你可以通過OsApi建立其他堆棧。
堆:是大家共有的空間,分全局堆和局部堆。全局堆就是所有沒有分配的空間,局部堆就是用戶分配的空間。堆在操作系統對進程初始化的時候分配,運行過程中也可以向系統要額外的堆,但是記得用完了要還給操作系統,要不然就是內存泄漏。
棧:是個線程獨有的,保存其運行狀態和局部自動變量的。棧在線程開始的時候初始化,每個線程的棧互相獨立,因此,棧是 thread safe的。操作系統在切換線程的時候會自動的切換棧,就是切換 SS/ESP寄存器。棧空間不需要在高級語言里面顯式的分配和釋放。