程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一、內存,,內存

一、內存,,內存

編輯:關於C語言

一、內存,,內存


1.內存分區: 高(內存地址大)  棧底      棧區                                                      堆區                                          
                                            靜態區                                             常量區
低(內存地址小)               代碼區 2.棧:數據結構 (1)特點:先進後出 (2)操作:入棧(push)出棧(pop) (3)棧從高->低分配空間 char a = 0; char b = 0; char c = 0; printf(“a:%p\n”,&a); printf(“b:%p\n”,&b); printf(“c:%p\n”,&c); (4)棧從低->高使用 char n1 = 1; char n2 = 0; short *p = &n2; printf(“%d\n”,*p); (5)函數:每一個函數,系統都會分配棧 int fun1(){      int n1 = 200;      return n1;
} int fun2(){      int n1;      return n1; } int main(){      fun1();      int m = fun2();      printf(“%d\n”,m);
} 主函數分配棧後,執行到fun1,再分配棧,該函數執行完畢後,標記n1被刪除,但是數據被保留;執行到fun2,有標記相同,獲得上一個棧保留的數據;然後,m拷貝數據,輸出m=200. (6)等號由右向左執行 (7)標記刪除(不刪除數據) (8)內存機制:數據不會清除,只是覆蓋 (9)注意:寫變量要賦初值 (10)系統分配以及回收內存 (11)函數體內創建的變量分配在棧區 int a = 10;//a存放在內存的棧區(當出了花括號則系統回收) 3.堆區 (1)動態內存分配, (2)關鍵字malloc ,釋放內存free(); (3)由用戶(程序員)分配和回收,如果程序員未回收內存,那麼內存就會越用越少,有可能導致內存不夠用,程序崩潰。如果沒有達到不夠用,程序安然無恙。 (4)當程序退出時,堆內存由系統回收(關鍵字free) 4.靜態區(全局區) (1)定義在函數體外面的變量,由系統開辟空間,程序運行過程一直都在,直到程序退出,由系統回收。 (2)變量不定義在任何函數體內 int x = 8;//x存放在靜態區 int main(){ }; (3)特點:①只初始化一次②如果初始化時未賦初值,默認值為0③靜態變量的空間只有程序退出才釋放(程序運行期間永遠存在) (4)目的:①延長變量生命周期②不增大該變量的作用域 (5)關鍵字:static for(int i = 0 ; i < 5 ; i ++){     // int m = 0;     static int m  = 0;//判斷在靜態區是否存在變量,結果等同於將int m = 0放在for循環外面
     printf(“%d\n”,m++);
} 5.常量區 (1)常量區的數據存儲在常量區,常量區的內容不可更改 (2)浮點數,整型數,字符數 int a = 10;//10存在常量區 6.代碼區 (1)存放源代碼的編譯區。所有寫的代碼,函數編譯成二進制放在代碼區 (2)所有的語句編譯後生成的CPU指令存儲在代碼區

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved