2015-10-13 79 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

相关问题