如果返回的是乙個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...