reinterpret_cast <bool *>将内存归零是否安全?

时间:2016-04-01 03:01:10

标签: c++ pointers casting boolean

背景:

我有一块内存,通过shm_open在两个进程之间共享。我保证在ftruncatemmap之后,整个块具有位模式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风格的转换相同的转换。

1 个答案:

答案 0 :(得分:1)

核心问题 - 即使内存全部为0,从正确初始化的bool 中读取它是否有效 - 与{相同} {3}}

长话短说:它的未定义行为适用于常见系统但不保证可移植性。允许特定实现来记录标准未定义的情况下的行为,因此值得对您关注的特定平台/编译器进行一些研究。