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