C++ 在Windows Mobile中动态分配内存映射文件的大小

C++ 在Windows Mobile中动态分配内存映射文件的大小,c++,windows,memory,windows-mobile,shared-memory,C++,Windows,Memory,Windows Mobile,Shared Memory,我试图找到一种方法,为不同进程之间共享的内存映射文件动态分配内存。我的设计如下:在Windows mobile中,我正在编写一个显示线程,使用共享内存处理来自不同进程的显示部分。计划是创建一个内存映射文件,该文件等于屏幕大小,例如:如果屏幕大小为640 X 480,然后我创建一个640 X 480 X 4的字节数组,然后与另一个进程共享该数组,以便另一个进程更新内存中的hDC显示,然后向显示线程发送更新以更新设备上的显示。 这很好,但有一个限制是在编译时分配内存,因为我们不能动态分配内存 (ht

我试图找到一种方法,为不同进程之间共享的内存映射文件动态分配内存。我的设计如下:在Windows mobile中,我正在编写一个显示线程,使用共享内存处理来自不同进程的显示部分。计划是创建一个内存映射文件,该文件等于屏幕大小,例如:如果屏幕大小为640 X 480,然后我创建一个640 X 480 X 4的字节数组,然后与另一个进程共享该数组,以便另一个进程更新内存中的hDC显示,然后向显示线程发送更新以更新设备上的显示。 这很好,但有一个限制是在编译时分配内存,因为我们不能动态分配内存

(http://msdn.microsoft.com/en-us/library/aa366542%28v=vs.85%29.aspx). 如果不希望更改文件的大小(例如,映射只读文件时),请调用CreateFileMapping并为dwMaximumSizeHigh和dwMaximumSizeLow指定零。执行此操作将创建与文件大小完全相同的文件映射对象。否则,必须计算或估计完成文件的大小,因为文件映射对象的大小是静态的;一旦创建,它们的大小就不能增加或减少

  • 在获得设备屏幕坐标后,是否有办法分配内存映射文件的大小?一件事是为了适应不同屏幕大小的设备,如平板电脑、移动设备等。另一件事是,如果应用程序只想显示屏幕的一部分,那么我们应该能够创建只有该大小的内存映射
  • 内存映射文件还有其他替代方法吗?我选择内存映射文件的原因是,当另一个进程修改显示时,它不需要发送所有更新详细信息,只需设置一个互斥体,让显示线程知道它需要刷新屏幕。通过这种方式,我可以从5个不同的应用程序中获得每秒50帧的刷新率

  • 提前感谢

    不要使用文件,将此数据写入磁盘没有任何价值。将无效的_HANDLE_值传递给CreateFileMapping,以便内存由分页文件支持,并且可以设置所需的任何大小

    不要使用文件,将此数据写入磁盘没有任何价值。将无效的_HANDLE_值传递给CreateFileMapping,以便内存由分页文件支持,并且可以设置所需的任何大小

    感谢您的回复。我使用的是无效的\u HANDLE\u值,但我的问题是用于映射文件的数据结构。我使用的字节数组大小等于设备屏幕分辨率,例如:640x480x4(~1.8MB),这是静态的。你的意思是说,我们可以使用任何大小,因为没有文件被创建。我还了解到内存映射的大小受磁盘空间的限制,因此即使我同时为50个不同的进程创建内存映射,我也不必担心。不要使用自己的数组,使用MapViewOfFile()返回的指针。非常好,这就是我犯错误的地方。谢谢你的回答。我使用的是无效的\u HANDLE\u值,但我的问题是用于映射文件的数据结构。我使用的字节数组大小等于设备屏幕分辨率,例如:640x480x4(~1.8MB),这是静态的。你的意思是说,我们可以使用任何大小,因为没有文件被创建。我还读到,内存映射的大小受磁盘空间的限制,因此即使我同时为50个不同的进程创建内存映射,我也不必担心。不要使用自己的数组,使用MapViewOfFile()返回的指针。很好,这就是我犯错误的地方。