如何解决如何在C中编写优化的逻辑以减少循环?
我有以下代码段,
int main()
{
int loop;
char * src = 0x20000000;
char * dest = 0x20000008;
for(loop = 0; loop < 8; loop++)
dest [loop] = src [loop];
}
这是有效的代码吗?如何优化逻辑以减少循环?
解决方法
假设编译器不会自动执行此操作,则可以在存在以下两个假设的情况下对其进行优化:
-
char
的大小为1个字节 - CPU指令集支持8字节操作(对于非64位平台,实现可能有所不同)
-
投射(或直接定义)
unsigned long long*
的源地址和目标地址 -
执行从源到目标的直接分配。如果平台指令集支持64位操作,则应导致从源到目标复制64位数据块。例如,在Intel CPU上,可以使用一条
movsq
汇编指令来完成。int main() { unsigned long long * src = 0x20000000; unsigned long long * dest = 0x20000008; *dest = *src; return 0; }
这是有效的代码吗?
您可以使用编译器进行查找。循环部分尤其是有效代码,我想这就是您真正要问的问题。
如何优化逻辑以减少循环?
在编译器中打开优化功能,其余的工作将得到解决。尽管可以使用memcpy()
使代码更简洁,更易于阅读,但从性能的角度来看,没有办法对其进行改进。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。