游戲編程:為什么C ++游戲開(kāi)發(fā)比Java更好,其實(shí)是因?yàn)檫@兩個(gè)點(diǎn)!
游戲開(kāi)發(fā)是一個(gè)比較廣泛的話題,說(shuō)哪種語(yǔ)言更好其實(shí)不合適,應(yīng)該是那種語(yǔ)言更適合那種層次的處理。在進(jìn)行數(shù)據(jù)量比較大的游戲開(kāi)發(fā)時(shí),更占優(yōu)勢(shì)的無(wú)疑是C++這門(mén)編程語(yǔ)言!之所以這樣講,以我的經(jīng)驗(yàn)來(lái)看主要是兩個(gè)方面!
幾年前,我用Java編寫(xiě)了一個(gè)過(guò)程3D建模應(yīng)用程序,該程序能夠處理數(shù)百萬(wàn)個(gè)多邊形,它使用了智能分區(qū)系統(tǒng),該系統(tǒng)生成線程以最佳利用所有CPU內(nèi)核。如此繁重。

我可以肯定地說(shuō),Java,甚至C#進(jìn)行海量數(shù)據(jù)計(jì)算的最大問(wèn)題不是該語(yǔ)言解釋的實(shí)際速度(您會(huì)想知道,但是這些語(yǔ)言的速度幾乎與C?++一樣快),但是內(nèi)存管理和垃圾回收是影響游戲的關(guān)鍵因素。
缺乏對(duì)內(nèi)存的控制權(quán),導(dǎo)致軟件消耗過(guò)多的內(nèi)存,同時(shí)產(chǎn)生由垃圾收集器引起的不規(guī)則的滯后。當(dāng)有足夠的可用內(nèi)存時(shí),軟件會(huì)平穩(wěn)運(yùn)行,但是達(dá)到限制(無(wú)論保留的內(nèi)存塊大小如何,都會(huì)達(dá)到限制)時(shí),用戶會(huì)遇到滯后,可能需要幾分之一秒甚至幾秒鐘的時(shí)間,這是非常糟糕的。

由于缺乏對(duì)內(nèi)存的控制,因此內(nèi)存管理器有時(shí)會(huì)保存巨大的內(nèi)存塊,您知道這些內(nèi)存塊將永遠(yuǎn)不會(huì)再被使用,并且您無(wú)法像C?++中那樣立即強(qiáng)制釋放這些內(nèi)存塊。
結(jié)果是該軟件的內(nèi)存效率非常低。
自動(dòng)垃圾收集系統(tǒng)對(duì)數(shù)據(jù)沒(méi)有更高的語(yǔ)義理解,因此它使用在大多數(shù)情況下“最佳”工作的策略,但是這種策略效率很低。在C?++中,您可以根據(jù)特定用途分配和釋放內(nèi)存塊,并使內(nèi)存管理更有效。但是,您需要自己完成所有工作,并且搞砸的可能性更大,這會(huì)對(duì)C?++產(chǎn)生致命的后果。

在Java?/?C#中,您實(shí)際上不必關(guān)心。這是一個(gè)懶惰的程序員功能,但這是一種更安全的方法。我希望看到將來(lái)的垃圾回收器實(shí)現(xiàn)方案,以實(shí)現(xiàn)對(duì)內(nèi)存的更多控制。您還可以使用自定義內(nèi)存管理器自行完成所有操作,但這將是一個(gè)不切實(shí)際的解決方案,但值得考慮。
用Java或C#編寫(xiě)代碼會(huì)產(chǎn)生更優(yōu)美的代碼,并使您比C?++更快地開(kāi)發(fā)軟件。

但是當(dāng)需要為GPU提供海量數(shù)據(jù)并最大程度地優(yōu)化所有內(nèi)容時(shí),最好使用C或C?++直接運(yùn)行代碼,這可以給您更多的控制權(quán),并使您可以更好地優(yōu)化代碼的性能敏感部分。
將Java?/?C#用于邏輯和管理將是一個(gè)好主意(在某些可能是大多數(shù)代碼的應(yīng)用程序中)。只要您使用視頻游戲引擎自己完成所有對(duì)性能敏感的工作,那么使用Java或C#等托管語(yǔ)言就可以了,甚至完全可以。

不幸的是,作為Unity開(kāi)發(fā)人員,我可以告訴您,當(dāng)您需要使用C#執(zhí)行對(duì)性能敏感的計(jì)算時(shí),可能會(huì)遇到這種情況,這可能表明該語(yǔ)言的局限性。
但是,您可以在應(yīng)用程序中使用自定義內(nèi)存管理器,并明智地設(shè)計(jì)代碼,以使其更容易在語(yǔ)言解釋器中更有效地運(yùn)行,從而獲得良好的性能,但是有時(shí)用C?/?C?++編寫(xiě)敏感部分可能會(huì)更好。
另外如果你想更好的提升你的編程能力,學(xué)好C語(yǔ)言C++編程,以便更好從事編程類工作(游戲開(kāi)發(fā))的話!那么你很幸運(yùn)~
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門(mén)教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!

學(xué)習(xí)C/C++編程知識(shí),提升C/C++編程能力,歡迎關(guān)注UP一起來(lái)成長(zhǎng)!
另外,UP在主頁(yè)上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~
