2011-05-27 76 views
4

最近我發現here如何將我的資源文件嵌入到可執行文件中。還有xxd方法。鑑於這個新發現的玩具,我首先將GLSL着色器的文本嵌入到我的遊戲中,現在我想嵌入遊戲所需的每個資源文件。將資源文件嵌入到可執行文件中的性能

現在我只有幾kb的3-D網格數據,但在這個數字增長之前,我想知道在可執行文件中嵌入多少數據是可行的?如果我在其中放入幾千兆字節的紋理數據,它會好嗎?濫用此功能的性能損失是多少?

+0

當你是看到部署了多個千兆可執行應用程序中的最後一次提出的問題?我更喜歡將我的紋理和其他資源存儲在數據庫中。與您的opengl包裝一起製作一個可以管理資源池和緩存的庫也是一個更好的設計。 – AJG85 2011-05-27 15:33:55

+0

微軟和其他人定期爲您提供安裝程序的大型可執行文件。 – Lyke 2011-05-27 15:51:46

回答

0

這種資源分配方法的缺點是所有資源都會在整個應用程序的整個存儲過程中出現在虛擬內存中。例如,如果您的遊戲中有10個關卡,則使用更常見的基於文件的存儲解決方案,您將只會載入您要玩的任何級別的數據。通過在運行時加載所有遊戲數據,您將分配更多的RAM,而不是必要的。使用最小量RAM的解決方案只會在需要的時間內加載所需的資源。

但是,如果您要爲資源使用基於文件的存儲解決方案並在執行開始時全部加載它們,則RAM使用情況將與靜態分配的資源方法相同。另外,如果您的目標機器是一個不會執行多任務處理的簡單遊戲控制檯,那麼您通常可以自由地以任何方式使用可用資源,最適合您。沒有必要「玩得好」,因爲一次只能運行一個遊戲。

如果你在現代系統上處理幾兆字節的話,懲罰可以忽略不計,但是當你達到幾千兆字節的數據時性能會受到影響,你將會對可用內存資源產生不必要的壓力系統。

編輯:一定要看到在評論

+4

在需求分頁的內存環境中,在實際嘗試訪問資源之前不使用內存。所有你放棄的是地址空間,在你達到極限之前它是免費的。當您停止訪問時,操作系統會很樂意回饋RAM。 – 2011-05-27 15:41:19

+1

爲了便於更好地分頁數據,你應該使數據爲常量,因此它將被放置在可執行文件的只讀部分,這會將內容分頁回可執行文件,而不是交換文件(鏈接中的imagemagic的作品不這樣做)。但問題是虛擬內存。如果您將1Gb的數據嵌入到32位可執行文件中,那麼您的程序的虛擬內存就會減少1Gb,如果您無論如何需要提取/解析數據,這是一個真正的問題。 – Lyke 2011-05-27 15:54:13

+0

靜態分配值分配內存不算作訪問?我知道如果我做'int a [1000];「在使用前沒有分配內存,但對於」int a [1000] = {1,2,3,...}「也是如此;」OS只是內存映射到RAM的文件段,並將按需分配? – gravitron 2011-05-27 15:56:22