2011-05-06 14 views

回答

4

從運行到在同一設備上運行的地址空間佈局將非常一致。很多主要的系統庫都是由zygote預先加載的,所以它們被共享映射繼承,這些共享映射是由它們分離出來以區分爲應用程序的。我猜想在虛擬內存級重新映射它們是可能的,但會產生一種動態重新鏈接的懲罰,並且實現起來相當棘手。

+1

zygote不在虛擬內存中運行嗎?如果新進程分叉,它應該是相同的地址? (我假設共享庫被加載到應用程序的內存空間中?)您知道我可以在哪裏找到有關Android架構的更多信息嗎? – Dpp 2011-05-10 05:16:22

+1

許多共享密鑰庫都由zygote加載一次,然後應用程序將它們作爲寫時複製頁面(通常不會) - 因此它們不會花費除計費以外的任何其他物理內存。爲了將它們放在隨機地址中,你必須將它們映射並修復加載的庫之間的所有斷開的鏈接,這將導致不僅時間成本,而且必須分配其過程鏈接表的私人副本,因爲你會用新地址更改它們。 – 2011-05-10 08:35:55