在多層巢狀迴圈中,若條件允許,應將迴圈次數最多的層放在最內層,次數最少的層放在最外層。這樣可減少 CPU 在迴圈層級之間切換的開銷,提升執行效率。
以下程式碼對比兩種不同維度陣列的巢狀迴圈存取效能:
// For巢狀效能.cpp
#include <iostream>
#include <time.h>
using namespace std;
int main(void) {
clock_t cstart, cends;
// 測試 1:外層 5 圈,內層 10,000,000 圈
cstart = clock();
long sum1 = 0;
long a1[5][10000000];
for (long i = 0; i < 5; i++) {
for (long j = 0; j < 10000000; j++) {
sum1 += a1[i][j];
}
}
cout << "sum1=: " << sum1 << endl;
cends = clock();
cout << "Clock 時間差: " << cends - cstart << endl;
// 測試 2:外層 10,000,000 圈,內層 5 圈
cstart = clock();
long sum = 0;
long a[10000000][5];
for (long i = 0; i < 10000000; i++) {
for (long j = 0; j < 5; j++) {
sum += a[i][j];
}
}
cout << "sum=: " << sum << endl;
cends = clock();
cout << "Clock 時間差: " << cends - cstart << endl;
system("pause");
return 0;
}
程式在 Windows Server 2008 x64、Visual C++ 6.0 編譯通過,但執行時發生 Stack Overflow 錯誤:


錯誤發生在宣告 long a[10000000][5] 時,陣列大小約 400 MB,超過預設堆疊大小(通常 1~8 MB),導致堆疊溢位。
解決方法:在專案屬性中增加堆疊保留大小:


new/malloc 或 std::vector),避免佔用堆疊空間。