c - C中的优化
问题描述
我一直在尝试优化一些简单的代码,我尝试了两种优化,循环注册和内存别名。
我的原始代码:
int paint(char *dst, unsigned n, char *src, char bias)
{
unsigned i;
for (i=0;i<n;i++) {
*dst++ = bias + *src++;
}
return 0;
}
循环注册后我的优化代码:
int paint(char *dst, unsigned n, char *src, char bias)
{
unsigned i;
for (i=0;i<n;i+=2) {
*dst++ = bias + *src++;
*dst++ = bias + *src++;
}
return 0;
}
在此之后如何使用内存别名优化代码?这段代码还有其他很好的优化吗?(就像将指针转换为长指针以快速复制)
解决方案
C中的优化比这更容易。
cc -Wall -W -pedantic -O3 -march=native -flto source.c
这将展开任何需要展开的循环。自行展开、Duff's Device 和其他技巧已经过时且毫无用处。
至于别名,您的函数使用两个char*
参数。如果保证它们永远不会指向相同的数组,那么您可以使用restrict
关键字。这将允许优化器假设更多关于代码的事情并使用矢量化指令。
查看此处生成的程序集:https ://godbolt.org/z/xMfebr或https://godbolt.org/z/j1xMYz
你能设法手工完成所有这些吗?可能不是。
推荐阅读
- python - Python - 异常给出“连接中止” - 我如何跳过它并继续
- javascript - 我认为 && 不适用于我的 javascript
- android - GraphView - 我看不到我的设计
- php - 如何在while循环上方打印变量
- java - onClick操作后无响应的错误
- ios - 如何将 UIView 添加到 SCNPlane ARKit
- php - PHP在变量文本中搜索并保存
- javascript - 即使安装了 webpack 和 babel,浏览器也会抛出 export/import 关键字的错误
- node.js - 使用“heroku open”部署我的 Node.js 应用程序时出现“应用程序错误”
- sql - 在表中生成相同的数据