Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Memory Mapped Files - Map a structure not a file?

I'm very new to Memory Mapped Files, and I'm a little lost on something.

I know that if I had a file, I could load it and access it from various processes at once using MMaps.

But in my situation, I'm creating a DLL attached to Process A, and that DLL has been given a pointer to a cSurface which Process A has prepared. I need to share that cSurface's data with Process B. I really don't want to have to call up a blank MMap and copy my Process A's surface into it, only to copy it out again in process B.

Is it possible to map my surface as if it were a file so the MMap already points to the surface data when it's created (as it would were I loading SomeTextFile.txt)?

My plan, in theory, would be to receive a pointer to the surface in Proc A, tell windows to share that surface's memory with a given name, and use Mutexes to coordinate access - the idea being that both processes read the same physical copy of the surface with no cumbersome copying.

Is that possible?

like image 420
Chris D Avatar asked Dec 14 '25 16:12

Chris D


1 Answers

Yes, it's all there in the documentation of CreateFileMapping.

You can give your memory mapped file a name. If another process open a mmap with the same name it will point to the same memory. It the handle in CreateFileMapping is put to INVALID_HANDLE_VALUE it keeps it purely in memory. Check the documentation of CreateFileMapping


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!