stack 翻譯為:棧 heap 翻譯為:堆
1.堆和棧大小
定義大小在startup_stm32f2xx.s
Stack_Size EQU 0x00000400
Heap_Size EQU 0x00000200
2.堆和棧各自的意義
以下引用網上資料 理解堆和棧的區別
(1)棧區(stack):由編譯器自動分配和釋放,存放函數的參數值、局 部變量的值等,其操作方式類似于數據結構中的棧。
(2)堆區(heap):一般由程序員分配和釋放,若程序員不釋放,程序結束時可能由操作系統回收。分配方式類似于數據結構中的鏈表。
(3)全局區(靜態區)(static):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束后由系 統自動釋放。
(4)文字常量區:常量字符串就是存放在這里的。
(5)程序代碼區:存放函數體的二進制代碼。
例如:
int a=0; //全局初始化區
char *p1; //全局未初始化區
main()
{
int b; //棧
char s[]="abc"; //棧
char *p3= "1234567"; //在文字常量區
static int c =0 ; //靜態初始化區
p1= (char *)malloc(10); //堆區
strcpy(p1,"123456"); //"123456"放在常量區
}
所以堆和棧的區別:
stack的空間由操作系統自動分配/釋放,heap上的空間手動分配/釋放。 stack的空間有限,heap是很大的自由存儲區。 程序在編譯期和函數分配內存都是在棧上進行,且程序運行中函數調用時參數的傳遞也是在棧上進行。
3.堆和棧空間分配
棧:向低地址擴展
堆:向高地址擴展
顯然如果依次定義變量
先定義的棧變量的內存地址比后定義的棧變量的內存地址要大
先定義的堆變量的內存地址比后定義的堆變量的內存地址要小
4.堆和棧變量
棧:臨時變量,退出該作用域就會自動釋放
堆:malloc變量,通過free函數釋放
另外:堆棧溢出,編譯不會提示,需要注意
上一篇:ST TouchGFX軟件框架進一步更新,功能更豐富
下一篇:STM32 堆和棧的學習(二)
推薦閱讀
史海拾趣
在擴大產品線的同時,DLK公司也積極拓展國內外市場。通過參加各種行業展會、建立營銷網絡、加強客戶服務等方式,DLK公司成功將產品銷往全球多個國家和地區。在品牌建設方面,DLK公司注重產品質量和服務質量的提升,積極塑造企業形象和品牌形象。通過多年的努力,DLK已經成為了國內外知名的連接器品牌之一。
Exar公司一直注重全球布局和客戶支持。公司在全球設立了多個研發基地和客戶服務中心,以確保能夠為客戶提供及時、高效的技術支持和服務。此外,Exar還積極與全球各地的合作伙伴建立合作關系,共同推動電子行業的發展和進步。這種全球化的戰略布局不僅為Exar贏得了更多的市場份額和客戶信任,也為其未來的發展奠定了堅實的基礎。
以上五個故事簡要概述了Exar在電子行業中的重要發展歷程。通過這些故事,我們可以看到Exar如何通過不斷的技術創新、市場拓展和全球化戰略來保持其在行業中的領先地位。
Exar公司自1971年在加利福尼亞州成立以來,最初以生產高性能、高可靠性的線性集成電路而著名。然而,隨著技術的進步和市場的變化,Exar逐漸意識到通信領域的巨大潛力。因此,在1980年代初,公司開始專注于串行通信和數據存儲解決方案,包括UARTs(通用異步收發器)和存儲器ICs。這一轉變不僅擴大了Exar的市場覆蓋范圍,也為其后續的發展奠定了堅實的基礎。
在電子行業中,產品質量是企業生存和發展的關鍵。ATO SOLUTION公司始終堅持以質量為核心,建立了嚴格的質量管理體系。公司從原材料采購到產品生產的每一個環節都進行嚴格把控,確保產品質量的穩定性和可靠性。這種對品質的執著追求,使公司贏得了客戶的信任和口碑,為公司的長期發展奠定了堅實基礎。
“我的話題”中“我的回復”這一項,是保存曾經回復的帖子鏈接的,但是當帖子被人回復后。我無法從這些鏈接中找出來。而且現在的鏈接排序方式不知是怎樣的,很亂。我現在是習慣看回復時間。可是卻沒有完全按時間排序。我要從頭到尾找一遍。真的很麻 ...… 查看全部問答∨ |
|
按照《WinCE5.0 BSP BOOTLOADER開發詳解-生成bin和nb0 》(http://blog.eeworld.net/xiaoxiangtian/archive/2008/09/22/2963028.aspx)的方法做的,卻只能得到bin文件,得不到nb0文件,高手們幫幫忙呀… 查看全部問答∨ |
RT 誰做個這方面的 能否提供點思路 或者源碼 PC上關于這方面的代碼都挺多的,在Wince上沒有找到相關的資料,迷茫 據我分析 PC上的方法在Wince上面都無法實現的 PC上的方法: 1. 通過IP Helper Function中的幾個未公開的函數實現 All ...… 查看全部問答∨ |
EVC中 為什么不能對CDialogBar中的slider控件使用SetRange()函數? EVC中 為什么不能對CDialogBar中的slider控件使用SetRange()函數?還有SetPos()函數也不能用.… 查看全部問答∨ |
這樣子的,做了個控制器,電腦控制2個繼電器的閉合,這次做完后,發現1號繼電器工作,2號繼電器不工作,當1號繼電器不工作時,2號繼電器可以工作,也就是2繼電器始終只有一個有動作,因為做了蠻多的了,第一次碰到這個問題,繼電板也沒線路圖,PCI ...… 查看全部問答∨ |
PCI主模式下進行DMA傳輸好像需要自己設計DMA控制器,問下各位達人們,這個DMA控制器該怎么設計? 我沒有源代碼,閱讀了ACTEL公司的PCI IP核發現它用的是從模式DMA傳輸。 如果想設計主模式下的DMA傳輸,就應該自己設計DMA控制器? 是的話,這個DM ...… 查看全部問答∨ |
誠招ARM工程師,工作地北京,要求如下: 1. 自動控制、計算機、或通信專業本科學歷; 2. 嵌入式(ARM、51)產品開發5年以上經驗; 3. 熟悉常用的單片機系統外設(電源管理、通信接口、LCD、鍵盤等) 4. 能獨立進行硬件電路板的設計; 5. ...… 查看全部問答∨ |
看見BBS里很多老大說6PF晶振低溫也不振,有些不放心. 后面可能需要RTC,不太想用PCF8563了,于是測試了一下低溫(官方的程序).參數如下:12.5pf晶振6pf NPO 0603電容2layer FR4 PCB --------------------------------25度常溫2秒左右啟動.-20度7~9秒左 ...… 查看全部問答∨ |