gpt4 book ai didi

gcc - c 指针对齐

转载 作者:行者123 更新时间:2023-12-04 02:06:29 26 4
gpt4 key购买 nike

我想知道是否可以向 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 位对齐的,但它没有告诉编译器它指向的内容是对齐的,因此编译器可能会告诉它在这里进行未对齐的提取。如果我在一个大数组中循环,这可能会减慢速度。

最佳答案

有几种方法可以通知 GCC 有关对齐的信息。

首先,您可以将对齐属性附加到指针,而不是指针:

int foo() {
int __attribute__((aligned(16))) *p;
return (unsigned long long)p & 3;
}

或者您可以使用(相对较新的)内置函数:

int bar(int *p) {
int *pa = __builtin_assume_aligned(p, 16);
return (unsigned long long)pa & 3;
}

由于对齐,两种变体都优化为返回 0

很遗憾,以下内容似乎不起作用:

typedef int __attribute__((aligned(16))) *aligned_ptr;

int baz(aligned_ptr p) {
return (unsigned long long)p & 3;
}

这个也没有

typedef int aligned_int __attribute__((aligned (16)));

int braz(aligned_int *p) {
return (unsigned long long)p & 3;
}

即使文档 suggest the opposite .

关于gcc - c 指针对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986610/

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