C、python 、java記憶體管理區別__python

來源:互聯網
上載者:User
一、C 一個由c/C++編譯的程式佔用的記憶體分為以下幾個部分  1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。  2、堆區(heap) — 一般由程式員分配釋放, 若程式員不釋放,程式結束時可能由OS回收 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。  3、全域區(靜態區)(static)—,全域變數和靜態變數的儲存是放在一塊的,初始化的全域變數和靜態變數在一塊地區, 未初始化的全域變數和未初始化的靜態變數在相鄰的另一塊地區。 - 程式結束後有系統釋放  4、文字常量區 —常量字串就是放在這裡的。 程式結束後由系統釋放  5、程式碼區—存放函數體的二進位代碼。 
例子程式  這是一個前輩寫的,非常詳細  //main.cpp  int a = 0; 全域初始化區  char *p1; 全域未初始化區  main()  {  int b; 棧  char s[] = "abc"; 棧  char *p2; 棧  char *p3 = "123456"; 123456\0在常量區,p3在棧上。  static int c =0; 全域(靜態)初始化區  p1 = (char *)malloc(10);  p2 = (char *)malloc(20);  分配得來得10和20位元組的地區就在堆區。  strcpy(p1, "123456"); 123456\0放在常量區,編譯器可能會將它與p3所指向的"123456"最佳化成一個地方。  } 
二、 Python Python是用C實現的。 在python世界中,一切都是對象。整數、字串、類型(如字串類型)等都是對象。物件導向理論中的“類”“對象”在python中都是通過python內的對象實現的。 在python中,對象就是:為C 中的結構體在堆上申請的一塊記憶體。 所有的內建的類型對象(如整數類型對象、字串類型對象)都是被靜態初始化的。 在python中,一個對象一旦被建立,它在記憶體中的大小就是不變的(而 java在堆new的對象是在運行時動態分配記憶體的)。如果要容納可變長度資料的對象,只能在對象內維護一個指向一塊可變大小的記憶體地區。 和java、c#一樣,python提供了對記憶體的垃圾收集(GC)機制。 python中所有的記憶體管理機制都有兩套實現。這兩套實現由編譯符號PYMALLOC_DEBUG控制。 當該符號被定義時,使用debug模式下的記憶體管理機制。這套機制在正常的記憶體管理動作之外,還會記錄許多關於記憶體的資訊,以方便python在開發時進行調試。 當該符號未被定義時,python的記憶體管理機制只進行正常的記憶體管理動作。
三、Java Java把記憶體劃分為4個部分 : 
1、棧區(stacksegment)—由編譯器自動分配釋放,存放函數的參數值,局部變數的值等,具體方法執行結束之後,系統自動釋放JVM記憶體資源。 2、堆區(heapsegment)—一般由程式員分配釋放,存放由new建立的對象和數組,jvm不定時查看這個對象,如果沒有引用指向這個對象就回收。 3、靜態區(datasegment)—存放全域變數,靜態變數和字串常量,不釋放 4、代碼區(codesegment)—存放程式中方法的二進位代碼,而且是多個對象共用一個代碼空間地區。
Java自動管理棧和堆,程式員不能直接地設定棧或堆。        當在一段代碼塊定義一個變數時,Java就在棧中為這個變數分配記憶體空間,當超過變數的範圍後,Java會自動釋放掉為該變數所分配的記憶體空間,該記憶體空間可以立即被另作他用。
       在堆中產生了一個數組或對象後,還可以在棧中定義一個特殊的變數,讓棧中這個變數的取值等於數組或對象在堆記憶體中的首地址,棧中的這個變數就成了數組或對象的引用變數。

棧有一個很重要的特殊性,就是存在棧中的資料可以共用。 要注意這種資料的共用與兩個對象的引用同時指向一個對象的這種共用是不同的,因為這種情況a的修改並不會影響到b, 它是由編譯器完成的,它有利於節省空間的。而一個對象引用變數修改了這個對象的內部狀態,會影響到另一個對象引用變數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.