我从内存别名中了解到的是,两个指针可能引用相同的内存位置。
因此,当编译器认为存在别名时,它可能需要更多的周期来完成任务,因为它只尝试执行安全优化。我认为解决此问题的一种方法是更改指针的类型,因为编译器不会假设指针是别名的。
有哪些方法可以知道何时存在内存别名以及修复它们的最佳技巧是什么?
最佳答案
如果您确定两个指针永远不会重叠,则可以使用 C99 中的 restrict 关键字。
这可能允许编译器在某些情况下进行更积极的优化。它还可以更好地记录函数的语义,表明它仅适用于非重叠指针。
如果您不确定指针是否重叠,则不应使用restrict关键字。编译器将考虑指针重叠的可能情况并执行正确的操作。
这里没有中间立场。您要么确定您的指针不重叠,要么不重叠。
如果您正在编写对(可能的)效率提升很重要的代码,您可能可以花额外的时间来阅读调用代码并确定指针是否可以重叠。据我所知,没有任何自动工具可以为您执行此操作。我也看不出这样的工具在一般情况下是如何工作的。
关于c - 如何修复和检测指针上的内存别名以更好地优化 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795531/