久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

函數(shù)返回值在那里,?

 thunder123 2006-07-25
這個(gè)函數(shù)的返回值在那里的問題,。
給一個(gè)簡(jiǎn)單的函數(shù)
int fn(int a);
ing fn(a){
int ntmp;
ntmp=a+1;
return ntmp;
}
應(yīng)該是在CPU的那個(gè)寄存器中呢?還是內(nèi)存的那個(gè)位置,?
如果我用一下 fn(100),;
那我怎么知道去哪里找返回值呢?,?


int fn(int a);
======================
函數(shù)return時(shí),,把返回值放在寄存器EAX中。


如果程序中需要用到int fn(int a);的返回值,,如:int i =  fn(100),;
那么在函數(shù)返回后,將累加器EAX中的值,,存入變量i,。

你去看看你的編譯器編譯出來(lái)匯編代碼,就知道,,返回值在EAX里面了,。
還有,如果是16位的機(jī)器中,,應(yīng)該是在AX中


X86的機(jī)器 小于等于1個(gè)字時(shí)放在 EAX 中,,大于一個(gè)機(jī)器字小于等于2個(gè)字的放在 EDX:EAX中,大于2個(gè)字的在棧上開辟一段臨時(shí)的空間存放返回值,,浮點(diǎn)數(shù)類型的返回值放在ST0中。
    ARM的是返回值放在RO中,,其他的機(jī)器還沒怎么用過(guò),。


int result = fn(100);
這樣就保存到result變量中去了。


這要看具體編譯器的設(shè)計(jì),。對(duì)于簡(jiǎn)單的而且小的返回值,一般放在寄存器,對(duì)于復(fù)雜的對(duì)象
作為返回值的時(shí)候,,一般通過(guò)函數(shù)調(diào)用棧找到返回值的地址,,然后寫該地址.
記得thinking in c++ volume 1中說(shuō)得很清楚的


這個(gè)看你編譯器的實(shí)現(xiàn)了啊
vc是放在EAX寄存器中
這個(gè)你看一下匯編代碼就知道了啊,


至于函數(shù)的返回值在那里,,這要由編譯器根據(jù)返回值的類型和具體的調(diào)用情況等等因素來(lái)決定,。幸好對(duì)函數(shù)的使用者來(lái)說(shuō),他不需要知道具體的存放位置就可以使用返回值。
再回到題目上來(lái),。對(duì)于樓主提供的這個(gè)fn()函數(shù)來(lái)說(shuō),,它的返回是一個(gè)int型數(shù)。這種情況下一般的處理就是放到寄存器中,;但并不總是這樣,,因?yàn)檫€可能跟調(diào)用情況有關(guān)。例如下面的例子:
const int& ri = fn(100);
ri是函數(shù)返回對(duì)象(int型)的常量引用,。由于被引用,,函數(shù)返回對(duì)象的生存期得到了延長(zhǎng)。顯然這種情況下這個(gè)函數(shù)的返回值就不能始終放在寄存器中了,;這時(shí),,編譯器一般會(huì)采取另一種策略:在內(nèi)存中創(chuàng)建一個(gè)無(wú)名的臨時(shí)對(duì)象來(lái)保存函數(shù)的返回值。
以上想法沒有經(jīng)過(guò)確認(rèn),。是不是這樣,,請(qǐng)大家驗(yàn)證。

按約定,,都是放在eax中,,如果不按約定放在任何能放數(shù)據(jù)的地方都可以

const int& ri = fn(100);
===================================
這種是需要使用返回值的情況,函數(shù)返回后,,從寄存器中取出數(shù)據(jù),,放到內(nèi)存中(產(chǎn)生臨時(shí)變量),由
ri引用,。
返回值在寄存器只是臨時(shí)的存放,,即從被調(diào)函數(shù)的return開始,到返回調(diào)用處,。
函數(shù)返回后,,返回值必須馬上轉(zhuǎn)移到內(nèi)存(或者丟棄),因?yàn)榧拇嫫饕脕?lái)執(zhí)行指令,。


在VC中,,應(yīng)該是放在EAX寄存器中

另外補(bǔ)充一個(gè),C++允許給const引用綁定臨時(shí)對(duì)象,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多