簡體   English   中英

我對堆棧一無所知

[英]I don't understand something about stack

我讀了一篇關於堆棧的文章。 但我不理解下面這句話: 由於堆棧增長,第一個參數將存儲在最低地址(參數的這種反轉歷史上用於允許函數傳遞可變數量的參數)。

我的問題是:我認為即使參數沒有反轉存儲,我們仍然可以允許傳遞可變數量的參數。 例如, sp = sp - 4 ,然后我們push the first parameter's value onto the stack ,然后我們執行另一個sp = sp - 4push second parameter ,依此類推。

謝謝!

問題是:函數必須知道第一個參數的位置,而不是有多少個參數。

想象一下,你有

void fx(int, ...);

fx(2, -1, 42) /* 2 indicates 2 more arguments */;
fx(5, -1, 42, 2, 2, 2);

想象一下堆棧(在你想要的任何方向上增長)在通話之前有“XY”。

如果反向推動,則堆棧變為“XY 42 -1 2”或“XY 2 2 2 42 -1 5”,並且代碼很容易獲取第一個參數堆棧頂部的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM