新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32 堆棧分配

        stm32 堆棧分配

        作者: 時間:2016-11-28 來源:網絡 收藏
        1.堆和棧大小

        定義大小在startup_stm32f2xx.s

        本文引用地址:http://www.104case.com/article/201611/322726.htm

        Stack_SizeEQU0x00000400

        AREASTACK, NOINIT, READWRITE, ALIGN=3
        Stack_MemSPACEStack_Size
        __initial_sp


        ; Heap Configuration
        ;Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
        ;

        Heap_SizeEQU0x00000200

        AREAHEAP, NOINIT, READWRITE, ALIGN=3
        __heap_base

        2.堆和棧位置

        通過MAP文件可知

        HEAP0x200106f8Section512startup_stm32f2xx.o(HEAP)
        STACK0x200108f8Section1024startup_stm32f2xx.o(STACK)

        __heap_base0x200106f8Data0startup_stm32f2xx.o(HEAP)
        __heap_limit0x200108f8Data0startup_stm32f2xx.o(HEAP)
        __initial_sp0x20010cf8Data0startup_stm32f2xx.o(STACK)

        顯然Cortex-m3資料可知:__initial_sp是堆棧指針,它就是FLASH的0x8000000地址前面4個字節(它根據堆棧大小,由編譯器自動生成)

        顯然堆和棧是相鄰的。

        3.堆和??臻g分配

        棧:向低地址擴展

        堆:向高地址擴展

        顯然如果依次定義變量

        先定義的棧變量的內存地址比后定義的棧變量的內存地址要大

        先定義的堆變量的內存地址比后定義的堆變量的內存地址要小

        4.堆和棧變量

        棧:臨時變量,退出該作用域就會自動釋放

        堆:malloc變量,通過free函數釋放

        另外:堆棧溢出,編譯不會提示,需要注意



        關鍵詞: stm32堆棧分

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 乌兰浩特市| 岑巩县| 满城县| 呼和浩特市| 漳州市| 库车县| 桐柏县| 施秉县| 吴堡县| 平昌县| 尉犁县| 措勤县| 锦屏县| 新兴县| 永新县| 仙居县| 涞源县| 博乐市| 大理市| 巴东县| 上犹县| 云林县| 云南省| 富锦市| 巴彦淖尔市| 航空| 丰顺县| 崇礼县| 原阳县| 新闻| 修水县| 沙雅县| 依兰县| 图木舒克市| 平和县| 韶关市| 大关县| 东乡族自治县| 桐庐县| 靖江市| 岳西县|