C語言中關於哪些資料放在哪些區?
阿新 • • 發佈:2019-02-01
上圖是用手機拍攝的Unix環境高階程式設計中第二版中第七章的內容。
一個程式分為幾個區,可以從圖中明顯看到。需要說明的是,stack區是從第1GByte地址處以下開始,第1GByte地址處到stack開始的地方,是命令列引數和環境列表的儲存區。
需要解釋的是,初始化資料區和非初始化資料區,兩者在其他的書中都稱為資料區,data區。其中,程式中的已經初始化的資料區裡面又含有多種型別的資料存放。比如靜態變數儲存區static ,全域性變數儲存區global, 字串區 等等。
關於字串的不同儲存方式,請參考下面的一個連線:
http://www.geeksforgeeks.org/storage-for-strings-in-c/
如果在一個函式中,char str[] = "ABCD"; 那麼,str是放在函式的棧空間中的,字串"ABCD"也是放在棧空間中的。
如果在一個函式中,char *str = "ABCD"; 那麼,str是放在棧空間中的,而字串是放在data區的read-only部分。
如果在一個函式中,char *str = (char *)malloc(sizeof(char)*size); *(str+0) = 'A'; ... 那麼,str是放在棧空間中的,而字串是放在堆空間中的。
Note that: 第二種的字串是不可以更改的!