gpt4 book ai didi

更改 "Restrict"ed 指针的顺序会产生不同的程序集

转载 作者:行者123 更新时间:2023-12-04 16:00:07 25 4
gpt4 key购买 nike

我正在浏览 Wikipedia/Restrict , 并发现

The compiler can e.g. rearrange the code, first loading all memory locations, then performing the operations before committing the results back to memory.

后来,我注意到

void updatePtrs(long int *restrict ptrA, long int *ptrB, long int *val)
{
*ptrA += *val;
*ptrB += *val;
}

void updatePtrs(long int *restrict ptrA, long int *ptrB, long int *val)
{
*ptrB += *val;
*ptrA += *val;
}

不要使用 -Ofast 生成相同的程序集。这适用于 GCC 和 Clang。

您可以用它们进行试验 herehere

为什么他们有不同的程序集?这是意料之中的事吗?

最佳答案

ptrBval 都不是restrict,所以 ptrBval 可以指向相同的 long。当他们这样做时,*ptrA += *val;*ptrB += *val; 的顺序很重要。

即使所有指针都是restrict,也只允许编译器重新排列操作,而不是强制要求。

关于更改 "Restrict"ed 指针的顺序会产生不同的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50745990/

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