www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 技術(shù)讓夢(mèng)想更偉大
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容ID:技術(shù)讓夢(mèng)想更偉大作者:李肖遙如果大家細(xì)心的話應(yīng)該知道c/c語(yǔ)言函數(shù)參數(shù)入棧順序?yàn)閺挠抑磷螅敲礊槭裁催@樣呢?來(lái)看看兩個(gè)知識(shí)點(diǎn):參數(shù)的計(jì)算順序與壓棧順序。參數(shù)入棧順序c/c中規(guī)定了函數(shù)參數(shù)的壓棧順序是從右至左,函數(shù)調(diào)用協(xié)議會(huì)影響函數(shù)參數(shù)的入棧方式...

關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容

ID:技術(shù)讓夢(mèng)想更偉大

作者:李肖遙


如果大家細(xì)心的話應(yīng)該知道c/c 語(yǔ)言函數(shù)參數(shù)入棧順序?yàn)閺挠抑磷?,那么為什么這樣呢?來(lái)看看兩個(gè)知識(shí)點(diǎn):參數(shù)的計(jì)算順序與壓棧順序。

參數(shù)入棧順序

c/c 中規(guī)定了函數(shù)參數(shù)的壓棧順序是從右至左,函數(shù)調(diào)用協(xié)議會(huì)影響函數(shù)參數(shù)的入棧方式、棧內(nèi)數(shù)據(jù)的清除方式、編譯器函數(shù)名的修飾規(guī)則等。

參數(shù)傳遞和命名約定

Visual C/C 編譯器支持以下調(diào)用約定。

關(guān)鍵字堆棧清理參數(shù)傳遞
__cdeclCaller以相反的順序(從右到左)將參數(shù)壓入堆棧
__clrcalln/a按順序(從左到右)將參數(shù)加載到 CLR 表達(dá)式堆棧
__stdcallCallee以相反的順序(從右到左)將參數(shù)壓入堆棧
__fastcallCallee存儲(chǔ)在寄存器中,然后壓入堆棧
__thiscallCallee壓入堆棧;此指針存儲(chǔ)在 ECX 中
__vectorcallCallee存儲(chǔ)在寄存器中,然后以相反的順序(從右到左)壓入堆棧
官方詳解可見:

https://msdn.microsoft.com/en-us/library/984x0h58(v=vs.120).aspx

通常情況下c/c 默認(rèn)入棧方式:__cdel,也就是以右到左將參數(shù)壓入堆棧,Windows api使用的是__stdcall方式,__fastcall適用于對(duì)性能要求較高的場(chǎng)合。

自定義參數(shù)入棧形式

當(dāng)然我們也可以自定義函數(shù)的入棧順序,常用形式如下

//函數(shù)返回值??入棧規(guī)則??函數(shù)名(參數(shù)類型?參數(shù)名);
int?__cdecl?get_name_index(const?std::string
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉