欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
函數返回值在那里?
這個(gè)函數的返回值在那里的問(wèn)題。
給一個(gè)簡(jiǎn)單的函數
int fn(int a);
ing fn(a){
int ntmp;
ntmp=a+1;
return ntmp;
}
應該是在CPU的那個(gè)寄存器中呢?還是內存的那個(gè)位置?
如果我用一下 fn(100);
那我怎么知道去哪里找返回值呢??


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


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

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


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


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


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


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


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

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

const int& ri = fn(100);
===================================
這種是需要使用返回值的情況,函數返回后,從寄存器中取出數據,放到內存中(產(chǎn)生臨時(shí)變量),由
ri引用。
返回值在寄存器只是臨時(shí)的存放,即從被調函數的return開(kāi)始,到返回調用處。
函數返回后,返回值必須馬上轉移到內存(或者丟棄),因為寄存器要用來(lái)執行指令。


在VC中,應該是放在EAX寄存器中

另外補充一個(gè),C++允許給const引用綁定臨時(shí)對象。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
volatile關(guān)鍵字
C語(yǔ)言函數調用棧(二)
調用約定
for 循環(huán)和while循環(huán)區別
C++中虛函數的原理及實(shí)現
利用模板元編程實(shí)現解循環(huán)優(yōu)化
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久