一段關於變數與記憶體空間佔用的對話

來源:互聯網
上載者:User
 老丁-廈門(43515273) 2012/2/12 4:45:54
#include <iostream>
#include <iomanip>
using namespace std;void copystr(char *str1,char *str2)
{
 for(;*str2!='\0';str1++,str2++)
  *str1=*str2;
 *str1='\0';
}void main()
{
 char a[10];//如果把這句換成:char *a="ghi";就會發生錯誤,為什麼?
 char *b="abc";
 copystr(a,b);
 cout<<"a="<<a<<endl;
}
廈門英智-黃雙全(962017)  10:33:56
局部變數都是分配在棧裡面,比如定義char * a,的棧中佔用一個指標的大小
char a[10],佔用10個位元組的大小,有些系統為了對齊,會佔用12個位元組的大小
棧中的內容是可以改變的不過,char * a="ghi";其實是分成兩部份,char * a和"ghi",其中char *a在棧中,佔用了四個位元組,而"ghi"則是是分配在代碼區裡面,也就是和程式碼是在一塊區裡面
所以不能夠改變它char * a= "ghi";
char * b="abc";
a= b; 是正確定的,因為a是在棧裡面,改變的是a這個指標四個位元組的內容
copy b to a 是錯誤的,因為這個動作是要用abc來覆蓋ghi這三個字元,而ghi這三個字元是在代碼區裡面記憶體中,分為四種,一種是代碼空間,一種是資料空間(包括全域變數,局變數(棧),還有就是堆空間)
代碼空間是不允許改變的,受系統何護,而資料空間,則是都可以改變的 郭志順(513367429)  10:41:02
char a[] = "hello";
char a[10] = "hello";
這兩個都儲存在哪裡啊? 老丁-廈門(43515273)  10:41:38
char a[] = "hello";
char a[10] = "hello";
這兩個都儲存在哪裡啊?
儲存在堆裡 廈門英智-黃雙全(962017)  10:42:36
char a[]佔用了6個位元組空間,如果是局部變數,則分配在棧裡面,"hello"佔用6個位元組,藏在代碼裡面,在程式啟動並執行時候,有個初始化動作,會"hello"這個位置的內容,拷到char a[]這個位置去
會佔用兩份空間,一份是佔用程式空間,一份是佔用資料空間,只是編譯器自動加了一個拷貝動作進去 老丁-廈門(43515273)  10:44:14
堆棧,老和單片機的區分不開,單片機的堆棧就是這裡的棧,慣性思維 廈門英智-黃雙全(962017)  10:44:23
char a[10]佔用了10位元組的資料空間,"hello"佔用了6個位元組的代碼空間 郭志順(513367429)  10:45:49
那是不是還有拷貝行為 廈門英智-黃雙全(962017)  10:47:23
資料空間的佔用,根據你定義方式的不同,而不同,可能會儲存在“全域變數(全域空間,程式編譯完後,大小是固定的),局變數(棧)”兩種情況,如果需要存堆中,則需要調用malloc手動分配記憶體,再對它進行賦值
是的,是還有拷貝行為
所有對變數的初始化,都有一個拷貝行為 廈門英智-黃雙全(962017)  10:48:33
變數定義,在程式運行過程中,分定義和賦值過程,初始化,就是把定義和賦值寫在一行代碼中而己 郭志順(513367429)  10:49:00
嗯,明白了,非常的透徹
這些知識是屬於編譯原理裡面的嗎? 廈門英智-黃雙全(962017)  10:52:10
有部份編譯原理的知識,也有系統及硬體體繫結構相關的知識

聯繫我們

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