c - 如何修复和检测指针上的内存别名以更好地优化 C

标签 c performance pointers optimization compiler-optimization

我从内存别名中了解到的是,两个指针可能引用相同的内存位置。

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

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

最佳答案

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

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

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

这里没有中间立场。您要么确定您的指针不重叠,要么不重叠。

如果您正在编写对(可能的)效率提升很重要的代码,您可能可以花额外的时间来阅读调用代码并确定指针是否可以重叠。据我所知,没有任何自动工具可以为您执行此操作。我也看不出这样的工具在一般情况下是如何工作的。

关于c - 如何修复和检测指针上的内存别名以更好地优化 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795531/

相关文章:

c++ - XShm 完成事件未设置显示文件描述符

c - C 中字符串的声明

c - 为什么即使文件存在并且正确打开和关闭, fprintf() 也不打印任何内容?

java - 在长期服务器应用程序中有效地缓存和更新当前日期

javascript - 将 Node.js 应用程序扩展到 10 到 1000 个并发连接

c++ - 如果整数与指针的大小相同,是否将整数重新解释为指针双射?

c - 在 C 中动态构建二叉树时指针分配的问题

c - 创建一个通用 C 列表来包含指针

Java : performance of the instance without variable

c - C 中的二维数组和双指针