strict-aliasing 相关问题

严格别名是由C或C ++编译器做出的假设,即取消引用指向不同类型对象的指针永远不会引用相同的内存位置(即它们不会相互别名)。

clang/gcc 假设指向成员的指针可以为不同类型的另一个成员别名?

在下面的示例中,编译器假设传递给 bar() 的 double 指针可能是整数成员 a 的别名: 结构体A { 整数a; 双b; }; 无效栏(双*); 在...

回答 1 投票 0

reinterpret_cast-ing 指向对象的指针与直接转换同一对象的引用时打破严格别名

关于警告有多个问题:从添加编译器选项 -Wstrict-aliasing=2 -fstrict-

回答 1 投票 0

通过联合对某些类型的别名有哪些禁止?

在C标准(具体来说,n3220,即C23的最新工作草案)中,哪些段落会使以下代码示例调用未定义的行为?: 无效 f(int *a, char *b) { (*a)++...

回答 1 投票 0

C 中复数和实数之间的严格混叠

假设我有以下代码 #包括 #包括 int main() { 双_Complex a = 1.0; 无效 * b = &a; 双 * c = b; c[0] = 3; c[1] = ...

回答 1 投票 0

C 中两个不同类型的不同变量的地址可以比较吗?

我很难理解 C 中严格别名的一个方面。 据我了解,不兼容类型的指针不能相互转换。但是指针比较呢...

回答 1 投票 0

C 和 C++ 在运行时对齐指针的合法性上有区别吗?

假设对齐是 2 的幂,则可以使用以下表达式来查找下一个正确对齐的地址: (地址 + 对齐方式 - 1u) & ~(对齐方式 - 1u) 然而,为了执行...

回答 1 投票 0

是否可以在不违反严格别名的情况下对齐指针?

可以使用以下表达式来查找下一个正确对齐的地址: (地址 + 对齐方式 - 1u) & ~(对齐方式 - 1u) 然而,为了执行它,地址需要转换为

回答 1 投票 0

C 中的严格别名和联合

考虑以下 C 程序(基于本文的示例): #包括 短 g(int *p, 短 *q) { 短z = *q; *p = 10;返回z; } int 主函数(无效){ 工会

回答 1 投票 0

C 中有效类型限制的澄清

我正在尝试理解C18标准第6.5节第6段和第7段的确切含义。 第 6 段定义了对象的“有效类型”,并在“An

回答 2 投票 0

是否存在 -Wstrict-aliasing 未检测到的任何严格别名规则违规?

我创建了一个通过一次复制8个字节来快速复制字符串的函数,类似于内置的memcpy。在下面的函数中,char 指针类型被转换为 unsigned long long 点...

回答 1 投票 0

类型双关指针可互转换类型在 C++23 中是否免受严格别名限制?

我试图根据 C++23 规范确定如下代码是否合法: #包括 模板 结构 S { 整数x; 无效去(){ ++x; ...

回答 1 投票 0

使用 std::memmove 来解决严格别名问题?

std::memmove() 可以用于将内存“移动”到同一位置,以便能够使用不同类型为其指定别名吗? 例如: #包括 #包括 #包括...

回答 2 投票 0

严格别名、CUdeviceptr 和 cuMemAllocManaged

cuMemAllocManaged 要求作为其第一个参数提供的指针为 CUdeviceptr * 类型(技术上为 unsigned int *),但使用托管内存的目的是能够操作...

回答 2 投票 0

使用 -Os 优化的 GCC 错误地假设指针为 NULL

最近我们切换到更新的 GCC,它优化了整个函数,并在优化大小时用“空指针访问”陷阱代码替换它。看着上帝螺栓,...

回答 1 投票 0

在 C 中将魔术地址转换为指针是否违反了严格的别名规则?

我知道以下代码违反了严格的别名规则 int 对象 = 10; int *pi = &object; // 好的 浮点数*pf = (浮点数*)pi; // 好的 浮动 f = *pf; // 未定义的行为 在

回答 1 投票 0

将标准布局结构重新解释为无符号字符是否有任何UB*

我想看看将 Color 结构重新解释转换为 unsigned char* 以传递给 API 是否安全 结构颜色{ 无符号字符 r、g、b、a; }; static_assert(sizeof(颜色) == 大小...

回答 1 投票 0

指向结构体及其第一个成员的指针的相互转换,以及 C 中的严格别名

我有结构 类型定义结构{ 整数我; 浮动 f; } S; 结构体指针与其第一个成员之间相互转换的规则说我可以这样写 SS; int *pInt = (...

回答 1 投票 0

将普通数组别名为“std::array”而不是 UB

我提出了几种技术来回答 Idiom for Initializing an std::array using agenerator function take the index? 的问题。 一个经典的回答方法是使用基于 std::index_sequence 的 sol...

回答 1 投票 0

C 中通过不透明指针对第一个结构成员进行严格别名

考虑以下 ISO C 代码: 结构体S{ 整数a; }; 无效 f() { 结构 S ; *(int*)&s = 1; // 1 ((struct S*)(struct Opaque*)&s)->a = 2; // 2 *(int *)(结构Opaq...

回答 1 投票 0

CAS'ing C++ 中 64 位字的 32 个低位

我有一个64位共享变量,一个线程想要CAS该字的低32位,同时忽略该字的高32位的变化。有没有一种便携的方式来实现无锁? 有吗...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.