Reading POD data directly from mmapped memory in C++

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I'm wondering if G++ has special guarantees for accessing mmapped
memory.

My use-case:
- I have some large data sets (>10GB) in a file, mostly float arrays,
  plus some POD management structs
- I need to share this data read-only between unrelated processes

To support this, I'd like to mmap the file containing the data into the
processes that access it (properly aligned of course), and read it
directly. I cannot memcpy the whole content, since then the data sharing
between processes would be lost.

However, my understanding is that C++ basically only allows memcpy from
such data, but no direct access e.g. as float array (which would be UB
in C++, because of the object lifetime rules).
See
https://stackoverflow.com/questions/55034863/dealing-with-undefined-behavior-when-using-reinterpret-cast-in-a-memory-mapping
for a very similar question from someone else.

My question: does g++ guarantee anything beyond ISO C++ in this regard?
Using mmap to share data between processes sounds very useful, so it
would be a pity if this was impossible.

Alternatively, I could write the direct data access in C, and call that
from C++. Basically, have a C function that mmaps the file, finds the
start of the float array in the file, and returns a 'const float*'
pointing to the start of the array. My understanding is that this is
legal in C. Would the returned pointer also be legal to use in C++?
(Assuming gcc and g++ as compiler; I'm asking about the guarantees GCC
gives beyond ISO C and ISO C++).

Thanks,
Thomas



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux