| 訪問模式 | 耗時 | 相對性能 |
|---|---|---|
a[i][j](行優先) | 94秒 | 基準 1.0x |
a[j][i](列優先) | 488秒 | 慢 5.2x |
測試代碼:三層循環10000次遍歷MAX×MAX數組,僅內層賦值語句不同。
GCC生成彙編僅4條指令不同(寄存器分配差異),指令級性能無本質區別。性能懸殊源於內存訪問模式。
二維數組在內存中按行連續存放:a[0][0], a[0][1], ..., a[0][n-1], a[1][0], ...
| 模式 | 內存訪問 | 緩存行利用 | 命中率 |
|---|---|---|---|
a[i][j] 內層遍歷列 | 連續地址 | 一行載入服務多次訪問 | 極高 |
a[j][i] 內層遍歷行 | 間隔n×sizeof(int)字節 | 每次訪問觸發新緩存行載入 | 極低 |
__builtin_prefetch手動預取使用perf stat -e cache-misses,cache-references量化緩存未命中率,指導優化方向。