循环优化方法有哪些,您能如数家珍般列举一二吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4921个文字,预计阅读时间需要20分钟。
译者注:原文Loop Optimizations:taking matters into your hands。你可以先阅读上一篇文章,了解编译器如何对循环进行优化。然后继续阅读本文,深入了解编译器如何对循环进行优化。在你了解了编译器如何优化你的代码之后,再继续阅读本文。
译者注:原文<Loop Optimizations: taking matters into your hands>
你可以先阅读 上一篇文章 来了解编译器如何对循环进行优化,然后再继续阅读这篇文章。
在你了解了编译器如何优化你的代码之后,接下来的两个问题是:你如何帮助编译器更好地完成它的工作,以及何时手动进行优化是有意义的? 在这篇文章中,我们试图对这两个问题给出答案,当然这并不容易。
优化“杀手”首先你需要知道的是,两个最大的优化杀手是函数调用和指针别名。这两个是最大的杀手是因为,对于很多编译器优化,编译器必须假设某个变量在它试图优化的关键代码中是常数。但是,当存在函数调用和指针别名的情况下,优化将不会发生,从而导致编译器产生非优化版本代码。
函数调用函数调用是性能杀手有两个原因。第一个原因是,就编译器而言,该函数可能已经改变了全局内存的完整状态。以下面为例:
for (int i = 0; i < n; i++) {
...
if (debug) {
printf("The data is NaN\n");
}
}
正如代码所示,debug 是一个全局变量,或一个栈分配的变量或者一个类成员。本质上,其他的函数可以修改这个变量的值。
本文共计4921个文字,预计阅读时间需要20分钟。
译者注:原文Loop Optimizations:taking matters into your hands。你可以先阅读上一篇文章,了解编译器如何对循环进行优化。然后继续阅读本文,深入了解编译器如何对循环进行优化。在你了解了编译器如何优化你的代码之后,再继续阅读本文。
译者注:原文<Loop Optimizations: taking matters into your hands>
你可以先阅读 上一篇文章 来了解编译器如何对循环进行优化,然后再继续阅读这篇文章。
在你了解了编译器如何优化你的代码之后,接下来的两个问题是:你如何帮助编译器更好地完成它的工作,以及何时手动进行优化是有意义的? 在这篇文章中,我们试图对这两个问题给出答案,当然这并不容易。
优化“杀手”首先你需要知道的是,两个最大的优化杀手是函数调用和指针别名。这两个是最大的杀手是因为,对于很多编译器优化,编译器必须假设某个变量在它试图优化的关键代码中是常数。但是,当存在函数调用和指针别名的情况下,优化将不会发生,从而导致编译器产生非优化版本代码。
函数调用函数调用是性能杀手有两个原因。第一个原因是,就编译器而言,该函数可能已经改变了全局内存的完整状态。以下面为例:
for (int i = 0; i < n; i++) {
...
if (debug) {
printf("The data is NaN\n");
}
}
正如代码所示,debug 是一个全局变量,或一个栈分配的变量或者一个类成员。本质上,其他的函数可以修改这个变量的值。

