上下文:
我有一块内存,它通过shm_open
在两个进程之间共享。我保证在ftruncate
ing和mmap
ing之后,整个块具有比特模式00000...
。我需要在两个进程之间共享一个布尔值。
一个更具体的问题:
在合理的POSIX系统上,以下内容是否保证是可以的(断言不会失败,UB也不会发生)?
void *my_shared_memory_region = calloc(1024, 1);
bool *my_bool = reinterpret_cast<bool*>(my_shared_memory_region);
assert(*my_bool == false);
我相信bool
中的实际值有一些限制,所以我不确定。我认为这个问题与这个问题不同,因为reinterpret_cast
不像C样式转换那样进行转换
核心问题-即使内存全为零,从内存中读取是否有效,就像从正确初始化的bool
中读取一样-与此问题相同。
长话短说:它是未定义的行为,适用于通用系统,但不能保证可移植。特定的实现可以记录标准未定义的情况下的行为,因此值得为您关心的特定平台/编译器做一些研究。