1. Allocate分配器中,如何解決多線程鎖的爭奪問題?
答:為了解決多線程鎖的爭奪問題,內存分配器分為了主分配區main_area和非主分配區no_main_area。主分配區和非主分配區
主分配區和非主分配區們形成一個環形鏈表,每一個分配區都是由一個互斥鎖來控制,主分配區可以通過brk和mmap實現內存的分配,非主分配區只能通過mmap實現,在收集小內存的時候,ptmalloc也要對分配進行上鎖操作。
在執行當前線程的時候,會查看當前線程的私有變量是否已經有分配區,如果存在的話,嘗試是否能加鎖,如果能加鎖的話,就使用該分配區分配內存。否則,遍歷環形鏈表查看是否有空閑的,能上鎖的分配區,如果有的話,使用該內存分配區去分配內存;如果沒有的話,malloc會再分配一個分配區供當前線程使用,同時將該分配區加入到環形鏈表中。
2. 在一台內存為2G的機器上,malloc(20G) 會怎樣?如果是new(20G) 會怎樣?
答:
內容參考: