背景:
我有一块内存,通过shm_open
在两个进程之间共享。我保证在ftruncate
和mmap
之后,整个块具有位模式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
内部的实际值有一些限制,所以我不确定。我认为这个问题与this one不同,因为reinterpret_cast
不会做与C风格的转换相同的转换。
答案 0 :(得分:1)
核心问题 - 即使内存全部为0,从正确初始化的bool
中读取它是否有效 - 与{相同} {3}}
长话短说:它的未定义行为适用于常见系统但不保证可移植性。允许特定实现来记录标准未定义的情况下的行为,因此值得对您关注的特定平台/编译器进行一些研究。