__declspec(restrict)和__declspec(noalias)之间有什么不同

时间:2015-02-24 06:18:41

标签: c++ visual-c++

__declspec(restrict)和__declspec(noalias)之间有什么不同 我已阅读此页面https://msdn.microsoft.com/en-us/library/k649tyc7.aspx。但不清楚它是什么。有人可以解释这两个注释解决了什么问题。

1 个答案:

答案 0 :(得分:7)

__declspec(restrict)声明函数的返回值指向没有别名的内存。也就是说,保证函数返回的内存不能通过程序中的任何其他指针访问。

__declspec(noalias)声明该函数不会从函数的参数中修改第一级间接之外的内存。也就是说,参数是函数所具有的外部世界的唯一引用。

这些都没有解决任何问题 - 它们只是编译器的性能提示。通常,编译器需要确保在寄存器或重新排序代码中缓存中间结果等事情不会受到函数调用上潜在别名的影响;这些声明是程序员的保证,编译器在编译这些特定函数时不需要担心这一点。