[英]I don't understand something about stack
我讀了一篇關於堆棧的文章。 但我不理解下面這句話: 由於堆棧增長,第一個參數將存儲在最低地址(參數的這種反轉歷史上用於允許函數傳遞可變數量的參數)。
我的問題是:我認為即使參數沒有反轉存儲,我們仍然可以允許傳遞可變數量的參數。 例如, sp = sp - 4
,然后我們push the first parameter's value onto the stack
,然后我們執行另一個sp = sp - 4
並push 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.