I am aware of the basics of shared memory and inter process communication, but since my application is fairly specific I’m asking this question for general feedback.
I am working on 64 bit machines (MacOS and Win 64), using a 32bit visual coding toolkit. It is not practical to port the toolkit to 64bit at this time so I have memory limitations.
I am working on an application which must be able to scrub (go back and forth based on user input) high quality video at fast speeds. The obvious solutions are:
1 – Keep it all in memory.
2 – Stream from disk.
Putting it all in memory at the moment requires lowering the video quality to an unacceptable point, and streaming from disk causes the scrub to hang while loading.
My current train of thought is to run a master and multiple slave programs. Each slave will load up a segment of the video into ram, and when the master program needs to load a different section of the video it will request this data from the slave and have it transferred over.
My question is, what is an appropriate way to do this?
I suspect shared memory will not allow me to get past the 32bit memory limitations my application currently has. I could do something as simple as pipes, but I was wondering if there is something else that is more suitable.
Ideally this solution would be Mac/Win portable, but since the final solution must reside on a windows box I will opt for windows solutions. Also the easier the better, as I’m not looking to spend weeks in dev time on this.
Thanks in advanced.
I’m going to guess you are (or at least can be) using a 64-bit machine with a 64-bit OS, even though it’s impractical to port all your code to 64 bits. I’m also assuming that your machine has enough memory available to hold the data you care about — the real problem is getting access to enough of that memory from 32-bit code.
If that’s the case, then I’d look at Windows’ Address Windowing Extensions (AWE) functions, such as
AllocateUserPhysicalPagesandMapUserPhysicalPages. These work quite a bit like file mapping except that when you map data into your address space, it’s already in physical memory instead of having to be read from the disk (i.e., the mapping is much faster).