Hello World的秘密,你知道嗎?
后記:系統調用不同于普通的函數調用,是操作系統提供的接口,需要從用戶態進入內核態才能完成,雖然沒有發生進程的切換,但是在內核態依然要保存用戶態的一些上下文,這樣才能恢復用戶態程序的運行。C函數庫在應用程序和操作系統之間起到了重要的橋梁作用,它不僅僅是像本文中的hello world那樣做一個簡單的中轉,還可能會封裝底層的系統調用,提供更高級的功能。比如存儲空間的分配和回收,可以有很多算法(最佳適應,首次適應等), 但是Unix提供的系統調用是sbrk,只會按照字節數增加或減少進程地址空間,這對應用程序來說是不夠的,這時候C函數庫的封裝函數malloc就可以發揮作用了。
文章中hello world的參數特別簡單,放到寄存器中就可以了,如果參數特別多,就需要在內存中開辟一段區域,把參數放入其中,然后把這個區域的指針放入到寄存器中來傳遞。
【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】