Questions tagged «strict-aliasing»


3
使用此指针会在热循环中引起奇怪的反优化
最近,我遇到了一个奇怪的取消优化(或者说错过了优化机会)。 考虑使用此函数可以有效地将3位整数的数组拆包为8位整数。它在每次循环迭代中解压缩16个整数: void unpack3bit(uint8_t* target, char* source, int size) { while(size > 0){ uint64_t t = *reinterpret_cast<uint64_t*>(source); target[0] = t & 0x7; target[1] = (t >> 3) & 0x7; target[2] = (t >> 6) & 0x7; target[3] = (t >> 9) & 0x7; target[4] = (t >> 12) & 0x7; …

13
在C ++中,应该麻烦缓存变量还是让编译器进行优化?(别名)
考虑以下代码(p类型为,unsigned char*并且bitmap->width为某种整数类型,确切地是未知的,并且取决于我们使用的某些外部库的版本): for (unsigned x = 0; x < static_cast<unsigned>(bitmap->width); ++x) { *p++ = 0xAA; *p++ = 0xBB; *p++ = 0xCC; } 是否值得对其进行优化[..] 在某些情况下,可以通过编写以下内容产生更有效的结果: unsigned width(static_cast<unsigned>(bitmap->width)); for (unsigned x = 0; x < width; ++x) { *p++ = 0xAA; *p++ = 0xBB; *p++ = 0xCC; } ...还是对编译器进行优化很简单? 您认为什么是“更好”的代码? 编辑者(Ike)的注释:对于那些对删除线文本感到疑惑的人,最初的问题措词很危险,接近主题外的领域,尽管获得了积极的反馈,却非常接近完成。这些已经被淘汰了。但是,请不要惩罚回答了问题的这些问题的回答者。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.