上下文:
我有一 block 内存,通过 shm_open
在两个进程之间共享。我保证在 ftruncate
ing 和 mmap
ing 之后,整个 block 的位模式为 00000...
。我需要在两个进程之间共享一个 boolean 值。
一个更具体的问题:
在合理的 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 风格转换所进行的相同类型的转换。
最佳答案
核心问题 - 即使内存全为零,是否可以像从正确初始化的 bool
中读取一样有效 - 与 this question 相同。
长话短说:它是未定义的行为,可以在通用系统上运行,但不能保证可移植。允许特定实现记录标准未定义情况下的行为,因此值得对您关心的特定平台/编译器进行一些研究。
关于c++ - 重新解释_cast<bool*> 清零内存是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36347283/