C語言指針域內存

計算機中:1個字節=8 byte;
32位代表32個地址總線,和操作系統的尋址地址有32個
一個地址代表一個字節;
1024字節=1K;32位最大管理內存4G;
1個字節佔用8個二進制位;

內存交給操作系統管理;
main()函數是入口,操作系統(統一管理內存)通過入口執行代碼,
操作系統除了給內存做編號,還做規劃,64位。前48位作爲用戶,程序員調用用,剩餘的供操作系統內核使用。
下圖爲64位操作系統的內存分配:
圖中每一小格佔一位,
ox0到0x7fffffffffffffff 是前48位
這裏寫圖片描述

指針本質是內存地址;
&a(變量尋址) 變量a所佔有內存的地址;變量就是個標識符,僅僅是標識作用。
*pa 指針變量(指針類型);

除了棧內存外,其餘都是先聲明的變量內存地址小;

數據段:存放全局變量,常量。

int類型佔用 4個字節;
而且我們的尋址找的是首地址值。比如int類型連續佔用四個字節。
編譯器的優化功能(跟我們寫代碼的順序不一樣)而是將同一類型的放在一起:如下代碼

  int a = 1;
  int *pa=&a;
   int *pb=&a;
  int b =2;
  a:oxfffffffde00;
  b:oxfffffffde04;
  *pa:oxfffffffde08;
  *pb:oxfffffffde10;

指針類型:
32位操作系統中,指針類型佔4個字節。
64操作系統所有指針類型佔8個字節。

(*qutrate) (3) //到這個地址取值。小括號表示一個整體,函數指針。

“`

(gdb) p pa
4=0x7fffffffddfegdbppa 4 = 3

“`指針運算(指針偏移量)
下圖gdb調試 int型數組的結果,
操作系統會根據數據類型,來自動調節指針的偏移量。
這裏寫圖片描述

char 類型的數組的偏移量爲1個字節,注意的是char類型的數組以 \0結尾。“hi”是兩個字節,但實際是三個字節,因爲是以 \0結尾。

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