2015-10-13 54 views
0

我在至少有27GB內存的服務器上運行模擬。 我的程序的功能是將數據包連續插入隊列中,每隔一段時間都會進入隊列。程序被錯誤停止,當它的內存佔用2GB時,通過觀察服務器的任務管理器。因此,有是幾個問題我會問:OMNeT ++的一個程序的內存是否只能使用2GB?

  1. 如何2GB的值設置爲較大的一個,而我在服務器足夠的內存?

  2. 一個數據包會佔用多少字節並保存在隊列中,以記錄其信息?

  3. 我認爲對於模擬器來說,一個數據包(cPacket)會帶來很多信息,並且使存儲容易,甚至大部分信息都不會被使用。所以,如果我想生成一個數據包,只需帶上我需要的信息,我該怎麼辦,而不使用cPacket?
  4. 我對sizeof(隊列)進行了編碼,值總是4,不管是插入還是插入數據包,爲什麼?有沒有其他的詞來看看一個隊列有多少內存使用?

其它信息: 1.當我運行2個節目parellelly,總內存可能大於2GB,而且也沒有錯誤,如果一個程序使用小於2GB。

非常感謝!

+0

StackOverflow的目標是收集問題和(良好)答案的存儲庫。問多個問題很難確定哪個答案是好的。 –

+0

作爲進一步的評論,您是否檢查是否遇到任何[由Microsoft Windows施加的內存限制](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366778%28v=vs。 85%29.aspx)? –

+0

正如克里斯托夫所說:請僅在SO上使用一個很好制定的問題(即請編輯您的問題並刪除問題2,3,4)。 – Rudi

回答

1

OMNeT ++帶有一個32位版本的MinGW,這意味着在Windows上編譯的所有omnet ++模擬都將是32位進程。 32位進程不能大於2GB(Windows上的某些版本爲3GB)。所以你看到的是32位地址空間的硬限制。即使主操作系統是64位(就像您的情況一樣),情況也是如此。

Linux和Mac OS X上的OMNeT ++使用64位編譯器,因此這些限制不適用。這個問題的簡短答案是您應該在Linux或Mac OS上運行您的模擬。

由於這似乎是一個相對較大的機器,我猜你不能用Linux重新安裝它。一個很好的解決方法是將64位Linux發行版安裝到Virtual box guest中,並將其用於運行OMNeT ++仿真。這樣你就可以使用機器的幾乎所有物理資源。

+0

不應該的答案是,安裝MinGW-w64並不使用與OMNeT ++捆綁在一起的?提議改變圖書館的操作系統(更不用說安裝者的)缺點並不是最好的解決方案 –

+0

理論上是。安裝MinGW-w64可以解決這個問題,但是我不想推薦一些我沒有嘗試過的東西。搜索所有軟件包並安裝它並不總是像在Linux系統上一樣簡單。事情可能會在幾點中斷(例如從IDE啓動,調試)。雖然可能在omnepp.org上單獨下載一個Mingw64工具鏈將是一個好主意。 – Rudi

相關問題