如何修复和检测指针上的内存别名,以便在C中实现更好的优化

时间:2016-11-24 22:58:04

标签: c performance pointers optimization compiler-optimization

我从内存别名中理解的是两个指针可能引用相同内存位置的情况。

因此,当编译器认为存在别名时,可能需要更多周期才能完成任务,因为它尝试仅执行安全优化。我想解决这个问题的一种方法是改变指针的类型,因为编译器不会认为指针是别名的。

有什么方法可以知道什么时候存在内存别名以及修复它们的最佳技巧是什么?

1 个答案:

答案 0 :(得分:1)

如果您确定两个指针永远不会重叠,则可以使用C99中的 restrict 关键字。

这可能允许编译器在某些情况下进行更积极的优化。它还更好地记录了函数的语义,表明它只适用于非重叠指针。

如果您确定指针是否重叠,则不应使用restrict关键字。编译器将考虑重叠指针的可能情况,并做正确的事情。

这里没有中间地带。你要么确定你的指针没有重叠,要么你不是。

如果您正在编写(可能的)效率提升很重要的代码,您可能需要额外的时间来读取调用代码并确定指针是否可以重叠。我知道,没有自动工具可以为你做这件事。在一般情况下,我也无法看到这样的工具是如何工作的。