我對return 語句的理解 3

2021-04-22 20:06:13 字數 2040 閱讀 8261

如果返回的是乙個struct物件,return 語句會如何做呢?下面是測試**

#include 

using

namespace std;

struct big

b,b2;

big bigfun(big b)

int main()

在main開頭和結尾設斷點

8:   int main()

19:   

004012fb   pop         edi

004012fc   pop         esi

004012fd   pop         ebx

004012fe   add         esp,118h

00401304   cmp         ebp,esp

00401306   call        __chkesp (004081e0)

0040130b   mov         esp,ebp

0040130d   pop         ebp

0040130e   ret

*/@ilt+0(?bigfun@@ya?aubig@@u1@@z):

00401005   jmp         bigfun (00401250)

11:   big bigfun(big b)

12:   

0040127f   pop         edi

00401280   pop         esi

00401281   pop         ebx

00401282   mov         esp,ebp

00401284   pop         ebp

00401285   ret

返回到main函式

004012db   add         esp,70h//銷毀區域性引數

004012de   mov         esi,eax//bigfunction()返會值臨時變數的首位址

004012e0   mov         ecx,1bh

004012e5   lea         edi,[ebp-6ch]//b2.operator=(big &)引數的首位址

004012e8   rep movs    dword ptr [edi],dword ptr [esi]

004012ea   mov         ecx,1bh

004012ef   lea         esi,[ebp-6ch]

004012f2   mov         edi,offset b2 (00438500)//b2的首位址

004012f7   rep movs    dword ptr [edi],dword ptr [esi]

21:22:       return 0;

004012f9   xor         eax,eax

23:24:   }

004012fb   pop         edi

004012fc   pop         esi

004012fd   pop         ebx

004012fe   add         esp,118h

00401304   cmp         ebp,esp

00401306   call        __chkesp (004081e0)

0040130b   mov         esp,ebp

0040130d   pop         ebp

0040130e   ret

總結:1.一般function frame的結構是

函式內區域性變數

ebpeip

函式引數

如果返回值是乙個struct物件function frame

函式內區域性變數

ebpeip

函式引數

(由於暫存器太小,不可能放一塊struct記憶體,所以儲存了臨時變數的首位址).

2.struct物件的臨時變數是在棧上的,而不是在堆上.

我對SNS我理解

模仿也要做得比真的還好,比如qq,它的業務包括客戶端都是模仿別人的,但能做得像它那樣,的確不容易。sns在國內肯定能火的,不過現在的sns 只是太跟風了,沒有了自己的特點,很多的sns 很難看出它到底還是不是sns,或者它到底去哪個方向?自己都沒有弄清楚。所以sns在國內是很有機遇的。其實在當前經濟...

return語句的用法

return語句用於退出函式,向呼叫方返回乙個表示式。return在不帶引數的情況下 或者沒有寫return語句 預設返回none。none是乙個特殊的值,它的資料型別是nonetype。nonetype是python的特殊型別,它只有乙個取值none。它不支援任何運算也沒有任何內建方法,和任何其他...

我對補碼的理解

計算機中用補碼表示乙個數是為了方便運算的,這樣減法也可以通過加法來實現。為什麼這樣設計行呢?主要是因為計算機里數的特殊儲存格式決定的,計算機裡用固定位數表示乙個數,超過該位置的部分會被捨棄。拿8byte的int型來說,無符號形式下,最大到1111 1111 255,超過了該範圍,會被截斷的,如 11...