2016-05-12 96 views
-1

Win 7 64bit,2GB RAM,20GB虚拟内存。图像大小:640 * 480像素。我已经设置了20GB的虚拟内存,但代码仍然无法工作,因为内存不足

该代码主要做三件事: 1)两个线程从两个摄像头获取图像数据。 2)两个线程将数据推入两个队列。 3)两个线程将队列的数据写入两个avi文件。

为了使存储过程不影响获取速度,我将它们分成不同的线程。但是如果我使用相同的线程获取图像并写入图像,则不会出现此问题,因为获取速度等于写入速度。

使用二进制文件可能会有帮助,但我不明白为什么虚拟内存不起作用。任何其他有用的方法?非常感谢你。

+1

你实际上是否定位了x64?如果你只有2GB,那么你的程序很容易死于快速切换。这会加剧摄像机吐出图像时出现的流水问题,而不是您可以保存它们。队列正好满了并最终落下。跟上实时摄像头提要需要一个好的视频编解码器。 –

+0

是的,你确实是对的。无论虚拟内存有多大,仍然需要时间将数据写入磁盘。关键是要使写入速度快于存储速度。我使用系统的编解码器,它是“x264vfw - H.264/MPEG-4 AVC” –

+0

“代码仍然无法工作”是什么意思?你有错误吗?程序行为错了吗? – user2079303

回答

2

只是一个猜测,但如果你运行它作为32位应用程序(具有64位Win不会使所有的应用程序为64位,它将很高兴地运行任何32位应用程序),那么你不能使用(地址)超过2GB *的内存,所以添加更多没有帮助。您需要构建并运行它作为64位应用程序,以便通过您的应用程序使用超过2GB *的内存。

编辑:好吧,看来我第一次是正确的。 :-) 2gb是Windows的限制(见注释),4gb是指针可以解决的理论最大值。

+0

一个32位指针可以引用4GB的内存(地址空间)。 – IInspectable

+0

@IInspectable当然。愚蠢的错误。 – Resurrection

+0

2GB限制实际上是正确的(对于Windows上的32位应用程序,除非您设置了[IMAGE_FILE_LARGE_ADDRESS_AWARE](https://msdn.microsoft.com/en-us/library/aa366778.aspx)),无论4个字节多少指针可以解决。 – user2079303

相关问题