小弟想在32位的WINDOWS XP或2003中做一個程序,這個程序要向系統申請10G左右的內存,但不知道怎麼做,誰能給點提示呢?
原來是老朋友,怪不得對我這麼瞭解。我現在確實懶了,想要做的事情做了個計劃,大概的算了一下時間,任務都排到2012年去了。
32位系統使用超過4GB的物理內存也是可以的,但是有一些限制:
1. 必須有那麼多內存安裝(廢話)
2. 操作系統要支持PAE(物理地址擴展)
就你的需要來說,XP、Win2003標準版是不可能的了,它們支持PAE也只限於4GB物理內存,至少要Win2003企業版,支持32GB以上內存。
有了操作系統的支持,32位應用程序只需要用AWE API就可以訪問更多的物理內存了,AllocateUserPhysicalPages、MapUserPhysicalPages、FreeUserPhysicalPages等等。
注意,用這種方法,分配了10GB內存,但是不能線性訪問的,要分次映射(MapUserPhysicalPages)到用戶的2GB地址空間中的一個小窗口,然後通過這個小窗口訪問,類似DOS程序使用EMS、XMS的方法。
個人建議對於這麼大的內存使用量,是否可以考慮使用內存磁盤(RamDisk),也許性能消耗會相對大一點,但是編碼會稍小很多,並且相對通用。
不能,樓主可以考慮用C++來寫一個能執行Lua、Javascript這類腳本語言的程序,用戶就用這些腳本語言寫解密算法,再壓縮~加密~保存成一個你自己認識的調用文件。
關於腳本語言的支持網上有很多,Lua用得比較多,Windows也自帶了ActiveX Scripting,還有FireFox的引擎SpiderMonkey和Chrome的V8引擎都是不錯的。
可不可以由用戶自己編譯一個dll呢?你定義好接口,用戶按照這個編譯秤dll文件,你在程序裏面loadlibrary調用
用戶可以定義DLL,我們一開始也是這樣想的,但軟件賣給用戶,就不是想裝我們軟件後還去裝C++builder編譯器,所以,前面這種方法被我們否定了。
樓的意思是你定義一個DLL的接口(例如規定DLL裏的導出函數名,該函數可以返回一個虛基類),由客戶來定製這個DLL(即由客戶編寫DLL,實現這個虛基類並返回給你的程序),就象很多帶插件的軟件一樣。
用腳本語言解釋,速度不會快吧
ASPEN PLUS等大型軟件中都有自己的編譯器,試試12樓的方法,這個比較可行。
我覺得好的方法是你發佈程序的時候,帶個bcc32的編譯器,用戶寫好代碼以後,用這個編譯器編譯一下,生成個dll
6樓:解析腳本,那不是跟編譯原理有關了,冒失很複雜。不是很懂。能不能說清楚。
8樓:用C#寫一個接口,然後用BCB調用,那樣是不是需要實現這個接口,然後讓主程序調用呀,這樣的話,還是用戶提供編譯了。
樓主到底是什麼需求啊?怎麼感覺有點走偏了呢?
如果網關是一個服務器,可以在服務器上寫個廣播程序,發送類似“我是網關,我的ip是XXXX”這樣的廣播報,
如果是交換機或者路由器,那就不知道怎麼做了