重新解释cast<是否安全;bool*>清空内存



上下文:

我有一块内存,它通过shm_open在两个进程之间共享。我保证在ftruncateing和mmaping之后,整个块具有比特模式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中读取一样-与此问题相同。

长话短说:它是未定义的行为,适用于通用系统,但不能保证可移植。特定的实现可以记录标准未定义的情况下的行为,因此值得为您关心的特定平台/编译器做一些研究。

最新更新