? 最近學(xué)習(xí)過(guò)程中碰到有關(guān)函數(shù)調(diào)用方法,如:__stdcal,_cdecl和__fastcall。查閱了一些相關(guān)的資料和別人的經(jīng)驗(yàn),我總結(jié)如下:

          __stdcal,_cdecl,__fastcall有三個(gè)方面來(lái)區(qū)分:

          1:函數(shù)參數(shù)是按什么順序壓入棧中的。

          2:調(diào)用完畢后是由誰(shuí)來(lái)釋放棧中的空間的。(這個(gè)問(wèn)題主要是因?yàn)楹瘮?shù)傳遞過(guò)程中是存放在棧中的,可以選擇調(diào)用者釋放空間,也可以選擇被調(diào)用者釋放。)

          3:產(chǎn)生函數(shù)名的修飾方法。

          ???????????????????????????????????????????????????
          ?__stdcal
          ?_cdecl
          ?__fastcall
          ?
          1
          ?從右到左
          ?從右到左
          ?一般指?jìng)魉筒怀^(guò)4個(gè)字節(jié)的參數(shù),通過(guò)寄存器,不用棧,這樣比較快
          ?
          2
          ?函數(shù)自己解決棧的清除工作,如Windows的API函數(shù)
          ?棧的清除工作是由調(diào)用者(不同的編譯器產(chǎn)生棧的方式不盡相同)
          ?從左邊開(kāi)始的兩個(gè)大小不大于4個(gè)字節(jié)(DWORD)的參數(shù)分別放在ECX和EDX寄存 器,其余的參數(shù)仍舊自右向左壓棧傳送
          ?
          3
          ?_func@12
          ??func@@ZAXXZ
          ?@func@12
          ?

          為了避免由編譯器造成的問(wèn)題,強(qiáng)烈建議在調(diào)用時(shí)使用__stdcal。

          ?

          posted on 2009-06-16 15:35 -274°C 閱讀(502) 評(píng)論(0)  編輯  收藏 所屬分類: C++

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊(cè)

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916110
          • 排名 - 40

          最新評(píng)論

          主站蜘蛛池模板: 公安县| 环江| 东丽区| 西华县| 阜宁县| 遵义县| 稷山县| 赣州市| 元朗区| 辽宁省| 揭西县| 通渭县| 顺义区| 内丘县| 镇沅| 台安县| 南乐县| 西乌珠穆沁旗| 林西县| 高淳县| 金昌市| 西华县| 巴林左旗| 教育| 绥宁县| 阿图什市| 雷山县| 藁城市| 新密市| 行唐县| 揭阳市| 孟村| 寿宁县| 紫云| 日照市| 黑水县| 平武县| 都匀市| 安顺市| 宝鸡市| 平罗县|