1. 程式人生 > >C語言中關於哪些資料放在哪些區?

C語言中關於哪些資料放在哪些區?

上圖是用手機拍攝的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: 第二種的字串是不可以更改的!