青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

SmartPtr
本博客已搬至:http://www.cnblogs.com/baiyanhuang/
posts - 29,comments - 176,trackbacks - 0
By SmartPtr(http://m.shnenglu.com/SmartPtr/) 
 
 今天收到學(xué)弟的一封信,問(wèn)我關(guān)于變量與內(nèi)存的一些問(wèn)題,其實(shí)這是一個(gè)很基本的概念,但可能還有很多人對(duì)這個(gè)還不太了解(包括自己可能也會(huì)有誤解的地方),遂將原信與回信放于此:
  
原信
問(wèn)幾個(gè)我比較混亂的問(wèn)題。
看一下我寫(xiě)的對(duì)不對(duì)
int g_variable; //占編譯后的代碼空間,運(yùn)行時(shí)占內(nèi)存(常住內(nèi)存)
const int c_value = 5;    //占編譯后的代碼空間, 是不是常住內(nèi)存呢?
void fun(void)
{
static int s_variable;    //占編譯后的代碼空間,運(yùn)行時(shí)占內(nèi)存(常住內(nèi)存)
int variable;    //fun 被調(diào)用時(shí)放入棧中(占用內(nèi)存)
}
如果我定義一下大一點(diǎn)的數(shù)組,如:
const int c_array[100] = ...;
程序一運(yùn)行時(shí)就會(huì)被分配 400 Byte 的內(nèi)存空間嗎?還是在我使用它時(shí)會(huì)被分配400 Byte 的內(nèi)存空間嗎?

回信
先給你大概講一下基本概念, 問(wèn)題在原信下用紅色回答
 
一個(gè)程序的運(yùn)行起來(lái)后,其在內(nèi)存中有5個(gè)區(qū)域
1. 程序代碼區(qū)
這個(gè)很簡(jiǎn)單,存放執(zhí)行指令,代碼要執(zhí)行,肯定要加載進(jìn)內(nèi)存, 我們不必關(guān)心。
 
2. 文字常量區(qū)
一般我們這樣定義一個(gè)字符串時(shí),其是在文字常量區(qū)的:
char* s1 = "hello, world";
char* s2 = "hello, world";
if(s1 == s2)
  printf("s1和s2指向同一個(gè)在文字常量區(qū)的字符串");
 
這里, s1和s2指向的是同一個(gè)字符串
 
3. 靜態(tài)存儲(chǔ)區(qū)
全局變量,靜態(tài)變量會(huì)放在這個(gè)區(qū)域,事實(shí)上,全局變量也是靜態(tài)的。
 
以上1,2,3三個(gè)區(qū)域的內(nèi)存在程序起來(lái)的時(shí)候就開(kāi)辟好了的。
 
4. 棧
局部變量就是在棧里的。另外,函數(shù)調(diào)用時(shí)的參數(shù)也是在棧里的,這個(gè)現(xiàn)在不必關(guān)心
 
5. 堆
malloc或new出來(lái)的內(nèi)存就是在堆里的,需要程序員自己管理清除。


**********原信***************************************************

問(wèn)幾個(gè)我比較混亂的問(wèn)題。
看一下我寫(xiě)的對(duì)不對(duì)
 
int g_variable; //占編譯后的代碼空間,運(yùn)行時(shí)占內(nèi)存(常住內(nèi)存)
[Huang]屬于3,程序一運(yùn)行就占內(nèi)存,知道程序退出才釋放
 
const int c_value = 5;    //占編譯后的代碼空間, 是不是常住內(nèi)存呢?
[Huang]其實(shí)這個(gè)與是否const無(wú)關(guān),如果這句是全局的,那么同上,如果是局部的,那么屬于4
 
void fun(void)
{
static int s_variable;    //占編譯后的代碼空間,運(yùn)行時(shí)占內(nèi)存(常住內(nèi)存)
int variable;    //fun 被調(diào)用時(shí)放入棧中(占用內(nèi)存)
}
[Huang]第一句屬于3, 第二句屬于4
 
如果我定義一下大一點(diǎn)的數(shù)組,如:
 
const int c_array[100] = ...;
 
程序一運(yùn)行時(shí)就會(huì)被分配 400 Byte 的內(nèi)存空間嗎?還是在我使用它時(shí)會(huì)被分配400 Byte 的內(nèi)存空間嗎?
[Huang]還是那句話,是全局的,那么 程序一運(yùn)行時(shí)就會(huì)被分配 400 Byte 的內(nèi)存空間, 如果是局部的,那么在我使用它時(shí)會(huì)才會(huì)被分配400 Byte 的內(nèi)存空間
 
你這里多次提到const, 其實(shí)const與這個(gè)主題并沒(méi)有關(guān)系。的確,const與static聲明的全局變量具有內(nèi)部鏈接的特性,但是即使在每個(gè)obj里都有一個(gè)此變量的拷貝,也不影響其內(nèi)存在靜態(tài)區(qū)的分配。
posted on 2007-09-13 00:01 SmartPtr 閱讀(1158) 評(píng)論(5)  編輯 收藏 引用

FeedBack:
# re: 答學(xué)弟問(wèn)之變量與內(nèi)存問(wèn)題
2007-09-13 00:36 | aGAric
還有一點(diǎn),如果你的全局變量是初始化過(guò)的
比如
staitc int array[100] = {0};

那么你的編出來(lái)的.o ,或者是.exe也會(huì)大出 100*sizeof(int)。 如果沒(méi)有初始化,那么他們放在bss段,就不占程序code的大小了。

const 還是有區(qū)別的, const的變量可能是在只讀的數(shù)據(jù)區(qū)域。  回復(fù)  更多評(píng)論
  
# re: 答學(xué)弟問(wèn)之變量與內(nèi)存問(wèn)題
2007-09-13 09:05 | SmartPtr
我的理解是這樣的:
1. 靜態(tài)存儲(chǔ)區(qū)又分為靜態(tài)初始化存儲(chǔ)區(qū)和靜態(tài)未初始化存儲(chǔ)區(qū),正如你說(shuō)的,前者對(duì)應(yīng).data段,后者對(duì)應(yīng)bss段, 但是不論在哪個(gè)段,都要占程序內(nèi)存空間的吧

2. const變量應(yīng)該只是編譯器語(yǔ)法上的一個(gè)限制,數(shù)據(jù)會(huì)在哪個(gè)存儲(chǔ)區(qū)并不由其決定, 事實(shí)上, 繞過(guò)C++語(yǔ)法,改變const值是很容易的:
const int ci = 10;
__asm
{
mov eax, 100;
mov ci, eax;
}  回復(fù)  更多評(píng)論
  
# re: 答學(xué)弟問(wèn)之變量與內(nèi)存問(wèn)題
2007-09-13 23:27 | aGAric
bss段只記著這里有一個(gè)數(shù)組,大小是多少就占一點(diǎn)空間,data段里面需要占用整個(gè)變量的大小。

某些編譯器的實(shí)現(xiàn),確實(shí)會(huì)把const 的數(shù)據(jù)放在只讀段, 你當(dāng)然可以寫(xiě)那個(gè)地址,但系統(tǒng)可能會(huì)拋出一個(gè)異常。  回復(fù)  更多評(píng)論
  
# re: 答學(xué)弟問(wèn)之變量與內(nèi)存問(wèn)題
2008-08-19 11:42 | Matrix
這樣改不了const的值哇@SmartPtr
  回復(fù)  更多評(píng)論
  
# re: 答學(xué)弟問(wèn)之變量與內(nèi)存問(wèn)題
2008-09-17 22:54 | Dandelion
添加volatile關(guān)鍵字,就看到了
const volatile int ci = 10;
__asm
{
mov eax, 100;
mov ci, eax;
}

不加volatile關(guān)鍵字的話,編譯器發(fā)現(xiàn)在自己的可見(jiàn)范圍內(nèi)ci沒(méi)有被改變,于是就假設(shè)_asm{}之后ci的值沒(méi)變,導(dǎo)致生成的匯編代碼為:
push 0Ah

加了關(guān)鍵字后,編譯器就不會(huì)對(duì)ci做任何的假設(shè),于是生成的匯編代碼變成了這樣:
mov eax,dword ptr[i]
push eax  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线你懂的| 一区二区三区视频在线观看 | 亚洲欧美国产毛片在线| 亚洲精品国精品久久99热一| 一区二区在线看| 国产综合第一页| 国产亚洲欧洲| 国产一区二区三区av电影| 国产欧美日韩视频| 国产一区二区欧美日韩| 一区二区三区在线免费视频| 在线成人av.com| 亚洲福利视频免费观看| 亚洲国产三级在线| 99国产精品久久久久久久| 一本到12不卡视频在线dvd| 久久av资源网站| 久久一区二区三区四区五区| 欧美刺激午夜性久久久久久久| 欧美精品福利在线| 国产精品亚洲精品| 在线免费观看日韩欧美| 99综合精品| 久久国产日韩欧美| 亚洲青涩在线| 亚洲日本成人女熟在线观看| 一本久久精品一区二区| 久久精品99国产精品日本| 欧美激情精品久久久久久变态| 国产精品女主播在线观看| 在线播放亚洲| 欧美一区二区三区在线| 亚洲激情第一页| 亚洲制服av| 欧美国产丝袜视频| 国产综合在线看| 亚洲欧美日韩另类| 欧美激情久久久久| 亚洲视频国产视频| 欧美精品免费在线观看| 国内精品久久久久影院薰衣草| 在线综合亚洲| 欧美福利视频网站| 欧美在线免费视屏| 国产主播精品在线| 欧美成人精品1314www| 国产精品亚洲欧美| 99日韩精品| 欧美成人免费在线视频| 性18欧美另类| 欧美午夜大胆人体| 亚洲日韩中文字幕在线播放| 久久激情中文| 中日韩美女免费视频网站在线观看| 久久久久成人精品| 国产一区二区高清| 销魂美女一区二区三区视频在线| 亚洲国产成人av| 久久久一区二区三区| 国产精品视频免费一区| 在线视频精品一区| 亚洲黄色视屏| 欧美福利电影网| 在线播放日韩| 亚洲国产mv| 久久一区二区三区国产精品 | 亚洲精品永久免费| 久久久www成人免费毛片麻豆| 欧美视频在线一区| 亚洲手机在线| 亚洲视频一区二区| 国产精品理论片| 欧美伊人精品成人久久综合97| 中文网丁香综合网| 国产精品视频免费一区| 亚洲欧美日韩国产一区二区三区 | 一本久久a久久精品亚洲| 亚洲人成网站色ww在线| 欧美久久影院| 国产一区二区三区自拍| 免费观看日韩av| 免费一区二区三区| 亚洲美女中出| 在线综合亚洲| 国产原创一区二区| 欧美国产日本在线| 午夜精品久久久久久久男人的天堂| 国产精品乱人伦一区二区| 久久国产精品久久久| 久久久久国产一区二区三区| 亚洲激情在线激情| 中文在线一区| 国产亚洲免费的视频看| 蜜桃视频一区| 欧美三级电影大全| 久久久久久一区| 欧美另类在线播放| 欧美在线视频不卡| 久久久国产精品一区二区三区| 亚洲毛片在线观看.| 亚洲欧美日韩一区二区| 亚洲欧美日韩精品一区二区| 欧美一区网站| 亚洲精品一区二区网址| 亚洲综合二区| 亚洲精品国产拍免费91在线| 亚洲香蕉视频| 在线免费观看一区二区三区| 日韩视频免费观看| 在线不卡中文字幕| 欧美www在线| 欧美午夜欧美| 亚洲高清免费| 国产日韩欧美在线播放| 亚洲人精品午夜在线观看| 好看的日韩av电影| 亚洲一区二区在线观看视频| 欧美 日韩 国产一区二区在线视频| 亚洲一区精彩视频| 欧美成人午夜激情视频| 久久亚洲一区二区| 国产精品欧美日韩一区| 亚洲精品欧美日韩| 亚洲韩国日本中文字幕| 欧美主播一区二区三区美女 久久精品人| 亚洲精品中文字幕有码专区| 欧美中文在线字幕| 久久黄色级2电影| 国产精品国产三级国产普通话99 | 欧美激情女人20p| 欧美风情在线观看| 一区免费观看视频| 欧美尤物巨大精品爽| 亚洲欧美日韩国产一区| 欧美精品一区在线观看| 亚洲国产导航| 精品动漫3d一区二区三区免费| 午夜精品亚洲| 久久精品亚洲一区| 国产日本欧洲亚洲| 新狼窝色av性久久久久久| 久久狠狠一本精品综合网| 国产免费成人av| 亚洲欧美日韩精品久久亚洲区 | 99re在线精品| 最新亚洲视频| 裸体一区二区| 欧美激情小视频| 亚洲国产三级| 久久一综合视频| 亚洲第一色在线| 亚洲麻豆av| 欧美午夜免费电影| 性欧美大战久久久久久久久| 久久国产黑丝| 亚洲成人在线视频播放| 欧美不卡高清| 在线视频一区二区| 久久九九久久九九| 欧美亚洲一区二区三区| 蜜臀av一级做a爰片久久| 欧美激情在线狂野欧美精品| 亚洲黄色成人网| 欧美激情综合五月色丁香| 亚洲人成绝费网站色www| 宅男在线国产精品| 国产伦精品一区二区| 亚洲综合好骚| 母乳一区在线观看| 夜夜嗨av一区二区三区中文字幕| 国产精品成人午夜| 性色一区二区| 亚洲人成网站在线观看播放| 亚洲私人影吧| 韩国福利一区| 欧美片在线观看| 午夜视频在线观看一区二区| 亚洲国产成人porn| 欧美一区二区三区免费在线看| 永久久久久久| 国产精品白丝黑袜喷水久久久| 久久精品国产亚洲a| 日韩视频免费观看| 老色鬼精品视频在线观看播放| 一区在线影院| 国产精品国产三级国产aⅴ入口| 久久狠狠婷婷| 亚洲精品欧美日韩专区| 亚洲男女自偷自拍| 亚洲欧洲视频| 国产女主播一区二区三区| 久热综合在线亚洲精品| 亚洲欧美在线另类| 亚洲精品国精品久久99热一| 久久精品官网| 亚洲一区在线观看视频| 亚洲精品美女免费| 极品尤物一区二区三区| 国产精品爽黄69| 欧美日韩国产成人精品|