我想了解堆棧分配和對齊如何在具有gcc的Linux x86_64系統上使用pthread以及系統存儲在堆棧上的數據如何工作。我知道你可以使用pthread_attr_setstack
配置堆棧內存。我已經在測試程序,將執行以下操作完成的:什麼系統數據存儲在堆棧上
1)遞歸地調用自身,並且更新在所述堆棧
2)上分配打印出第一陣列元素的值未初始化數組,最後一個元素和rsp
從這我已經能夠觀察rsp如何遞增(在我的測試程序中,我注意到一些遞歸調用由編譯器內聯)。我也已經看到,添加TLS內存(使用__thread變量)會導致rsp的第一個值更低。所以它看起來像TLS變量分配在堆棧的頂部。
但是,我不確定的是還有什麼。在我看來,堆棧的第一頁以某種方式爲系統保留,因爲我分配的堆棧變量沒有在該區域中結束。即使我不使用任何__thread變量,我實例化的變量似乎不會分配到第一頁(我設置堆棧內存以便頁面對齊)。
所以我的問題是:除了TLS數據和堆棧變量之外,還有什麼,如果有的話,是在堆棧上的pthread?