Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

stack堆疊式什麼意思??

請問stack是什麼意思??

翻成中文是堆疊的意思....但還是不明白他的意義...

4 Answers

Rating
  • 8 years ago
    Favorite Answer

    我想你說的應該是

    stack memory 跟 heap memory

    是電腦存取記憶位址的方法

    有上面2種

    stack memory 用來存取區域變數和參數、回傳值

    執行程式的時候

    假設main函數呼叫函數add() 參數是 1,2 那就是 add(1,2)

    這個 1,2 參數會先被存到 stack

    而且因為有兩個參數 會用分開堆疊 1佔一格位子 2也佔一格 上下堆疊

    這個把東西放進去的動作叫做push (是個函數 stack::push())

    到add()這個函數的時候從這個堆疊再把這些參數取出來

    取出來之後 這個stack 就沒有這些值了 取出來的動作叫pull

    打個比方就是一排直的空抽屜

    假設這排有十個 你的手指頭初始時指著最下面的那個抽屜

    那你把東西放進去之後 你的手指會往上指一個

    如果你再放東西 這根手指就會放到指著的抽屜裡 再把手指移到上面那一格

    如果你要取東西 這根手指會往下指 然後再從指到的抽屜取出東西來

    這個比方裡抽屜就是stack memory

    放的東西是區域變數,回傳直,參數,暫時的值 而手指是pointer (指針)

    stack memory 的特性就是暫時性 取出來就不見了

    printf() scanf() cout() cin() getline() getchar() 這些也都是把輸入值存到stack

    然後再從stack拉出來輸出

    有一些常見的bug 就比如cin():

    string name, like;

    cout<<"what's your favorite:";

    cin>>like;

    cout<<"what's your name:";

    cin>>name;

    cout<<"you like"<<like;

    cout<<"your name"<<name;

    若此程式第一次cin>>like時輸如 apple juice,因cin也是個函數

    main會把apple juice交給stack

    然後因為cin只收一個string做為參數

    它從stack把最上面的apple收進來放到區域變數like之後 讀到空白鍵

    就以為這個string結束了

    因此自己喊停 叫apple以後的東西待在stack裡等著

    所以 第二次cin>>name的時候它不會讓使用者有機會輸入

    自己就把在stack最上面的juice放到cin的區域變數name裡

    (因為apple被取走 所以換接在後面的juice在最上面)

    而heap是使用new和delete宣告的時候用的記憶方法

    特性是容易控管 不用的記憶可以自行解放刪除

    適合存取較大的東西 類如structure 使用的時候要用指針 有興趣的話再補充~

    若有錯誤也請大大們指點 感謝

    2013-11-17 07:19:42 補充:

    感謝指點

    我一直都對這些概念有些模糊

    能受到指正 很有幫助

    2013-11-17 07:28:16 補充:

    改正一下 stack只是執行程式的時候 管理記憶的一種方法 跟函數無關

    除了c的malloc用的heap 還有c++的free-store 二者稱為dynamic記憶位址

    特別說明free-store 就是要用new宣告

    還可以放條件在不需要用的時候用delete刪掉,把記憶空下來

  • 8 years ago

    並不是要回答原PO的問題,

    而是回答者戰神派大星提的stack memory跟heap memory下面解釋完全錯誤.

    一般會提stack, heap是指執行期系統管理memory的方式,

    我們寫一個類似std::stack是由程式開發者寫的資料結構,

    這是兩回事, 戰神解釋的stack是後者.

    2013-11-16 21:38:59 補充:

    最後說heap是"特性是容易控管 不用的記憶可以自行解放刪除"

    是完全錯誤, 配置在heap區的memory要手動free,

    系統可以自動幫free的是配置在stack區的memory.

    另外C++的new其實是配置在free-store區而不是heap,

    C的mallac才是配置在heap區.

    2013-11-16 21:39:14 補充:

    建議戰神參考:

    http://stackoverflow.com/questions/79923/what-and-...

    http://stackoverflow.com/questions/1350819/c-free-...

  • ㄚ旺
    Lv 5
    8 years ago

    stack 堆疊.先進後出.就好像是放盤子一樣.最上面的盤子.一定最先被使用.

    關聯性概念.

    Queue 佇列(列隊).先進先出.就好像是去醫院排隊看診.先排隊的先看診.

  • wuman
    Lv 5
    8 years ago

    堆疊是程式基本要件之一,有寫過組合語言就知道,很重要,把一些暫存器的內容先用堆疊存起來,以保存值,這樣暫存器就可以再存別的值,等完成工作後,用POP指令把堆疊中的暫存器的值彈回原值

    堆疊是先進後出的,像疊十個人後,最上面的人要先起來,下面的人才起得來

    PS:暫存器是組合語言的基本

    一般暫存器:AX、BX、CX、DX

    AX:累積暫存器,BX:基底暫存器,CX:計數暫存 器,DX:資料暫存器。

Still have questions? Get your answers by asking now.