gpt4 book ai didi

c++ - 将 void * 指向 char 作为 int 读取有多安全?

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:51 24 4
gpt4 key购买 nike

将指向 char 的 void * 读作 int 有多安全?

示例:在访问 8 位字符比访问 32 位整数慢得多的系统中测试字符的第一位。

char c = 'B'; // a char here to illustrate the potentially dangerous case, but the
// point is this could be a char, could be an int... I am just
// interested in the first bit
void *v = &c;
int i = *(int *)v;
if (i & 0x01)
{
printf("yep");
}

似乎可以工作,但是如果我的 char (c) 恰好位于分配给该进程的有效内存的边缘,它会读入无效内存吗?或者系统是否足够聪明,可以在前 8 位后停止复制?

谢谢

最佳答案

在所有情况下都是未定义的行为。

在大多数实际系统中,它会从 c 和相邻内存中正常读取,如果 c 接近尾部则失败(访问冲突也称为段错误)内存页和相邻页被标记为不可读。

在数量较少但仍不平凡的系统中,您可能会遇到对齐错误和/或读取与 c 重叠但与 c< 重叠的 32 位值 在开始以外的某个位置。

但是如果编译器发现你这样做,它就得到了标准的许可,可以以非常糟糕的方式“优化”你的所有代码。


如果您担心 8 位访问速度慢的系统,请使用 int_fast8_t 而不是 char。这让您的构建环境可以选择更好的变量大小。

关于c++ - 将 void * 指向 char 作为 int 读取有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com