c++ - 重新解释_cast<bool*> 清零内存是否安全?

标签 c++ pointers casting boolean

上下文:

我有一 block 内存,通过 shm_open 在两个进程之间共享。我保证在 ftruncateing 和 mmaping 之后,整个 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/

相关文章:

c - 交换链表项问题 C

Java 转换接口(interface)但使用对象方法

casting - 字典中包含的 AnyObject 类型的强制转换值

c++ - 动态内存的打印地址,存储在指针数组中

c - "Pointer from integer/integer from pointer without a cast"问题

c - ANSI-C pow 函数和类型转换

c++ - 小数 Eigen 稀疏矩阵乘法误差

c++ - 是否有一个模板可以生成类的静态/动态绑定(bind)版本?

php - 如何在 C++ boost 中编写这些正则表达式?

c++ - 您如何输出从右到左阅读的语言?