---
title: 循环不变代码外提
description: "循环不变代码外提即结果不依赖于循环执行次数的表达式，放到循环执行前。可以显著减少循环中的代码运算量，提高代码运行速度。编译器可以对部分代码进行不变代码外提优化，如果表达式存在指针或者引用，则编译器不会进行自动优化。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/tuningtip/kunpengtuning_12_0089.html
sourcePath: /source/zh/perftuning/tuningtip/kunpengtuning_12_0089.html
indexId: d537e65a1bf4d911cd3d507356692ae162802185a6f167deaf556853062f07d358
---
# 循环不变代码外提

#### 原理

循环不变代码外提即结果不依赖于循环执行次数的表达式，放到循环执行前。可以显著减少循环中的代码运算量，提高代码运行速度。编译器可以对部分代码进行不变代码外提优化，如果表达式存在指针或者引用，则编译器不会进行自动优化。


#### 修改方式

修改前：

```
void fun(int arrayA [], int *p) {
for (int i = 0; i < ARRAYLEN; ++i) {
arrayA [i] = *p + *p + i;
}
}
```


修改后：

```
void fun(int arrayA [], int *p) {
int tmp = *p + *p;
for (int i = 0; i < ARRAYLEN; ++i) {
arrayA [i] = tmp + i;
}
}
```
