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

C程序存儲佈局圖解:.text .rodata .data .bss heap stack 完整對應

     編輯:關於C語言

五大段對應表

段名別名內容權限生命週期
.text代碼區函數二進制指令RX進程存續
.rodata常量區字符串字面量、const 全局變量R進程存續
.data / .rwdata全局初始化區已初始化全局/靜態變量RW進程存續
.bss全局未初始化區未初始化全局/靜態變量(自動清零)RW進程存續
heap堆區malloc/new 動態分配RW手動管理
stack棧區局部變量、參數、返回地址RW函數調用期

示例程序標註

[cpp]
int a = 0;               // .data
char *p1;                // .bss
int main() {
    int b;               // stack
    char s[] = "abc";    // "abc"在.rodata,s在stack
    char *p2;            // stack
    char *p3 = "123456"; // "123456"在.rodata,p3在stack
    static int c = 0;    // .data
    p1 = malloc(10);     // heap
    p2 = malloc(20);     // heap
    strcpy(p1, "123456");// "123456"在.rodata,編譯器可能合併
}

堆與棧深度對比

  • 管理:棧自動,堆手動(易洩漏)。
  • 大小:棧 ~1MB,堆 ~4GB(32位)。
  • 碎片:棧無碎片(LIFO),堆易碎片。
  • 增長:棧向低地址,堆向高地址。
  • 效率:棧極高(硬件指令),堆較低(搜索/系統調用)。

Global/Static 討論

  • static 全局:僅本文件可見,降低耦合。
  • static 局部:靜態存儲,生命周期延長至進程結束,僅初始化一次。
  • static 函數:內部函數,僅本文件可見。

防越界原則

無論堆棧,均需防止緩衝區溢出;使用 strncpy、snprintf、邊界檢查等安全函數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved