首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言陣列記憶體儲存方式:循序儲存與行優先順序詳解

     編輯:C 語言問答

核心答案:循序儲存,行優先

一維陣列:元素在記憶體中**連續**排列,a[i] 位址 = base + i * sizeof(type)。

二維陣列:行優先

int a[2][3] = {{1,2,3}, {4,5,6}};
// 記憶體佈局 (低位址 → 高位址):
// a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
//  1       2       3       4       5       6
  • a[i][j] 位址 = base + (i * COLS + j) * sizeof(int)。
  • 整行連續,換行間無間隙。

多維陣列推廣

a[d1][d2][d3]... 最後一維變化最快,第一維變化最慢。

對比:指標陣列 / 不規則陣列

int *ptr[3]; // 指標陣列
ptr[0] = malloc(2 * sizeof(int));
ptr[1] = malloc(5 * sizeof(int));
ptr[2] = malloc(3 * sizeof(int));
// 每行獨立 malloc,記憶體**不連續**,存取需兩次間接

效能啟示

  • 遍歷二維陣列:**外層迴圈跑行,內層跑列** → 連續存取 → 缓存友善、向量化友善。
  • 錯誤寫法:外層跑列、內層跑行 → 跳躍存取 → 缓存未命中嚴重。

靜態 vs 動態配置記憶體佈局

配置方式儲存區連續性生命週期
int a[100][200]; (全域/靜態).bss / .data完全連續程式全期
int a[100][200]; (區域)堆疊完全連續函式執行期間
malloc 連續大塊堆積完全連續手動 free 為止
指標陣列分別 malloc堆積不連續手動 free 為止
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved