我想知道是否有可能提示gcc一个指针指向一个对齐的边界。如果我有一个函数:
void foo ( void * pBuf ) {
uint64_t *pAligned = pBuf;
pAligned = ((pBuf + 7) & ~0x7);
var = *pAligned; // I want this to be aligned 64 bit access
}
我知道pBuf是64位对齐的,有没有办法告诉gcc pAligned
* 指向64位边界?如果我这样做:
uint64_t *pAligned __attribute__((aligned(16)));
我相信这意味着指针的地址是64位对齐的,但它并没有告诉编译器它所指向的是对齐的,因此编译器可能会告诉它在这里做一个非对齐的提取。如果我在一个大数组中循环,这可能会减慢速度。
1条答案
按热度按时间rxztt3cl1#
有几种方法可以通知GCC有关对齐的信息。
首先,你可以将align属性附加到pointee,而不是pointer:
或者你可以使用(相对较新的)内置:
由于对齐,两种变体都优化为
return 0
。但以下方法似乎不起作用:
这个也不行
尽管医生说的恰恰相反