循环优化方法有哪些,您能如数家珍般列举一二吗?

2026-05-19 20:280阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计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 是一个全局变量,或一个栈分配的变量或者一个类成员。本质上,其他的函数可以修改这个变量的值。

阅读全文