進程環境———內存管理

數據的內部存儲:大端法(0x12345678低位存儲在高位地址)小端法(0x12345678低                                 位存儲在低位地址)


C語言的存儲佈局——代碼段

是進程中最重要的一個段,是由CPU執行的指令部分。

C語言的存儲佈局——數據段and緩衝段

       初始化數據段(.data)——包含程序中明確給定初值的全局變量和靜態變量

       非初始化數據段(.bss)——未給定初值的全局變量and靜態變量。

       程序運行時由內核干涉將段中未初始化的初始化爲0(NULL)

C語言的存儲佈局——棧

      所有的自動變量以及函數調用需要保存的信息(返回地址,函數調用前各寄存器的

      值)都存儲在棧上。(經典錯誤:將一個指向局部變量的指針作爲函數的返回值)

C語言的存儲佈局——堆                                                                                                         堆用於存儲用戶申請的內存空間,進行動態內存分配



補充:
#include <stdio.h>
#include <unistd.h>
int a1=1;//auto爲臨時變量,不能放在全局區
static int a2=2;
const int a3=3;
int main()
{
    int b1 = 4;
   static b2 = 5;
  const b3 = 6;

  int* p = malloc(4);
  
  printf("a1:%p\n",&a1);
  printf("a2:%p\n",&a2);
  printf("a3:%p\n",&a3);
  printf("b1:%p\n",&b1);
  printf("b2:%p\n",&b2);
  printf("p:%p\n",p1);
 printf("main:%p",main);

}



查看進程內存管理:
            
    通過查看maps可得到結論:
     任何程序的內存空間分成4個基本部分
                    1.代碼區    (全局常量,如const int a=5;並且a也爲全局變量,函數名)
                    2.全局棧區(靜態全局變量,普通全局變量,靜態局部變量)
                    3.堆 (內存分配)
                    4.局部棧(局部常量,局部變量)

發佈了37 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章