gpt4 book ai didi

c - 这是否违反了 `restrict` 的语义?

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:06 25 4
gpt4 key购买 nike

注意 - 这与 restrict qualifier and pointer arithmetic 非常相似, 但不是重复的。该帖子的作者将对 restrict 指针的操作结果分配给同一个指针,而我将对 restrict 指针的操作结果作为参数分配给 restrict 函数参数。

我基本上理解 restrict 的含义,并且我开始养成在适用时声明函数参数 restrict 的习惯。但我不确定我是否在这里滥用它。

struct DynArray
{
void* data;
size_t elemCount;
size_t len;
};

void dyn_append(DynArray* restrict dst, const void* restrict src, size_t srcLen, size_t elemSize)
{
size_t oldElemCount = dst->elemCount;
dyn_setElemCount(dst, dst->elemCount + srcLen, elemSize); // might write to `*dst`
if (dst->data) // `dst->data` is set to `NULL` if reallocation fails.
// The next line might violate "restrict-ness" of `dst`.
memcpy((char*)dst->data + elemSize*oldElemCount, src, elemSize * srcLen);
}

具体来说,我指的是调用 memcpy 时的 (char*)dst->data + elemSize*oldElemCount。如果我传递了 dst 本身而不是上面的参数,我知道它是有效的,因为我会将它分配给一个本身是 restrict 的函数的参数。在这种情况下,参数是 dst 而不是 dst 本身的操作结果这一事实是否改变了事情?我的理由是,参数不会被别名的保证包含在 dst 不会被别名的保证中。

最佳答案

这很好,但它实际上没有做任何事情,因为没有时间别名 dst 指针会导致不同的行为。

关于c - 这是否违反了 `restrict` 的语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53787934/

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