新聞中心

        stm32堆棧詳解

        作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
        1.堆和棧大小

        定義大小在startup_stm32f2xx.s

        本文引用地址:http://www.104case.com/article/201611/322112.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個(gè)字節(jié)(它根據(jù)堆棧大小,由編譯器自動(dòng)生成)

        顯然堆和棧是相鄰的。

        3.堆和棧空間分配

        棧:向低地址擴(kuò)展

        堆:向高地址擴(kuò)展

        顯然如果依次定義變量

        先定義的棧變量的內(nèi)存地址比后定義的棧變量的內(nèi)存地址要大

        先定義的堆變量的內(nèi)存地址比后定義的堆變量的內(nèi)存地址要小

        4.堆和棧變量

        棧:臨時(shí)變量,退出該作用域就會(huì)自動(dòng)釋放

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

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



        關(guān)鍵詞: stm32堆

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 安国市| 南皮县| 蒙山县| 石景山区| 安阳县| 沿河| 通许县| 孝感市| 苏尼特左旗| 济源市| 鸡泽县| 富源县| 灌云县| 万载县| 郸城县| 比如县| 海原县| 红桥区| 柯坪县| 新巴尔虎右旗| 玉林市| 息烽县| 谢通门县| 涞源县| 盐津县| 永泰县| 黄龙县| 黄骅市| 保康县| 汉寿县| 武汉市| 神木县| 新乡市| 博野县| 永福县| 崇左市| 出国| 石城县| 光山县| 定陶县| 玛沁县|