C/C++程式的記憶體地區劃分

來源:互聯網
上載者:User

一個由C/C++編譯的程式佔用的記憶體分為以下幾個地區:

1、棧區(stack)

由系統自動分配和釋放,用於存放函數的參數值,局部變數值等。其在記憶體中是一塊連續的儲存地區,由低地址向高地址延伸。

2、堆區(heap) 

由程式員分配和釋放,若程式員不釋放,則程式結束時可能由作業系統回收。其儲存空間在記憶體中是不連續,分配方式類似於鏈表。 

3、靜態區(static)

又稱全域區,程式結束後由系統釋放,用於存放全域變數和靜態變數。初始化的全域變數和靜態變數在一塊地區,未初始化的全域變數和未初始化的靜態變數則儲存在相鄰的另一塊地區。 

4、文字常量區

程式結束後由系統釋放,用於儲存常量,字串常量就是放在這裡的。

5、程式碼區

存放函數體的二進位代碼。 

#include <stdlib.h>#include <string.h>int a = 0;       // 全域初始化區.char *p1;        // 全域未初始化區.int main(void){        int b;                       // 棧區.        char s[] = "abc";            // 棧區.        char *p2;                    // 棧區.    char *p3 = "123456";         // 123456\0 在常量區, p3 在棧上.        static int c = 0;            // 靜態(全域)初始化區.    // 分配得來的 10 和 20 位元組的地區就在堆區。        p1 = (char *)malloc(10);    p2 = (char *)malloc(20);    // 123456\0 放在常量區.    // 編譯器可能會將它與p3所指向的 "123456" 最佳化成一個地方.    strcpy(p1, "123456");    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.