培訓(xùn)無(wú)憂(yōu)網(wǎng)合作機(jī)構(gòu) > 學(xué)校機(jī)構(gòu) > 長(zhǎng)沙牛耳教育歡迎您!
長(zhǎng)沙學(xué)習(xí)C語(yǔ)言培訓(xùn)班還有優(yōu)勢(shì)嗎
發(fā)布時(shí)間:2021-11-03 10:21:30
選C而不選C++對(duì)您——以及任何將會(huì)維護(hù)你代碼的開(kāi)發(fā)人員——來(lái)說(shuō)都是可行的,通過(guò)采用強(qiáng)制簡(jiǎn)約主義來(lái)避免與C ++的復(fù)雜性糾纏。當(dāng)然,C ++擁有豐富的高級(jí)功能,這是有它自己的道理的。但如果極簡(jiǎn)主義更適合當(dāng)前和未來(lái)的項(xiàng)目——以及負(fù)責(zé)項(xiàng)目的團(tuán)隊(duì)——那么還是選C更明智一些。
Java輸給C的地方是一個(gè)Java從未打算競(jìng)爭(zhēng)的領(lǐng)域:靠近底層結(jié)構(gòu)運(yùn)行,或直接與硬件打交道。C代碼被編譯成機(jī)器代碼,由進(jìn)程直接執(zhí)行。Java被編譯成字節(jié)碼,這是一種隨后會(huì)被JVM解釋器轉(zhuǎn)換為機(jī)器代碼的中間代碼。此外,盡管Java的自動(dòng)內(nèi)存管理在大多數(shù)情況下都是個(gè)優(yōu)點(diǎn),但C更適合于必須充分利用有限內(nèi)存資源的情況。
也就是說(shuō),在某些方面,Java在速度方面可以接近于C。JVM的JIT引擎在運(yùn)行時(shí)根據(jù)程序行為優(yōu)化例程,允許進(jìn)行許多類(lèi)型的優(yōu)化,而這些優(yōu)化是在未提前編譯的C中無(wú)法實(shí)現(xiàn)的。雖然Java運(yùn)行時(shí)自動(dòng)執(zhí)行內(nèi)存管理,但一些較新的應(yīng)用程序可以解決這個(gè)問(wèn)題。例如,Apache Spark部分地通過(guò)使用繞過(guò)JVM的自定義內(nèi)存管理代碼來(lái)優(yōu)化內(nèi)存中處理。
與C一樣,C#和.Net提供各種直接訪(fǎng)問(wèn)內(nèi)存的機(jī)制。堆,棧和非托管系統(tǒng)內(nèi)存都可以通過(guò).Net API和對(duì)象訪(fǎng)問(wèn)。開(kāi)發(fā)人員可以使用.Net中的unsafe模式來(lái)實(shí)現(xiàn)更高的性能。
但這些都不是沒(méi)有代價(jià)的。托管對(duì)象和unsafe對(duì)象不能被任意交換,并且它們之間的編組會(huì)降低性能。因此,要最大化.Net應(yīng)用程序的性能需要將托管和非托管對(duì)象之間的變動(dòng)保持在最低限度。
如果您無(wú)法承擔(dān)托管與非托管內(nèi)存之間變動(dòng)造成的性能損失,或者.Net運(yùn)行時(shí)對(duì)于目標(biāo)環(huán)境(例如,內(nèi)核空間)來(lái)說(shuō)是一個(gè)糟糕的選擇,或者可能根本不可用,那么C就是你所需要的。與C#和.Net不同,C被默認(rèn)可以解鎖對(duì)內(nèi)存的訪(fǎng)問(wèn)權(quán)。
本文由培訓(xùn)無(wú)憂(yōu)網(wǎng)長(zhǎng)沙牛耳教育專(zhuān)屬課程顧問(wèn)整理發(fā)布,希望能夠?qū)ο雲(yún)⒓娱L(zhǎng)沙Java培訓(xùn)班的學(xué)生有所幫助。更多Java培訓(xùn)課程資訊歡迎關(guān)注培訓(xùn)無(wú)憂(yōu)網(wǎng)Java培訓(xùn)培訓(xùn)頻道或添加老師微信:1503333605010.
以上文章由長(zhǎng)沙牛耳教育課程顧問(wèn)整理編輯發(fā)布,部分文章來(lái)自網(wǎng)絡(luò)內(nèi)容真實(shí)性請(qǐng)自行核實(shí)或聯(lián)系我們,了解相關(guān)專(zhuān)業(yè)課程信息您可在線(xiàn)咨詢(xún)也可免費(fèi)申請(qǐng)?jiān)囌n。關(guān)注官方微信了解更多:150 3333 6050