新聞中心

        stm32 堆棧分配

        作者: 時間:2016-11-28 來源:網(wǎng)絡 收藏
        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個字節(jié)(它根據(jù)堆棧大小,由編譯器自動生成)

        顯然堆和棧是相鄰的。

        3.堆和棧空間分配

        棧:向低地址擴展

        堆:向高地址擴展

        顯然如果依次定義變量

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

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

        4.堆和棧變量

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

        堆:malloc變量,通過free函數(shù)釋放

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



        關鍵詞: stm32堆棧分

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 方城县| 湄潭县| 泊头市| 聂拉木县| 兴和县| 平阳县| 调兵山市| 高青县| 枣强县| 弥勒县| 永年县| 武功县| 青阳县| 伊宁县| 岳阳市| 东城区| 武胜县| 堆龙德庆县| 搜索| 崇礼县| 云梦县| 会理县| 阿克陶县| 岱山县| 虎林市| 新野县| 江陵县| 凤庆县| 连山| 波密县| 稻城县| 澄城县| 儋州市| 琼海市| 怀远县| 凤山市| 稻城县| 扎鲁特旗| 东辽县| 隆昌县| 旌德县|