測試環境:stm32+iar6.4
堆區大小設定為0x1000(預設值)。
變數定義:
char *p=null;
char *p2=null;
1. 申請記憶體大小超過設定值
p = (char *)malloc(sizeof(char)*5090);
malloc返回null,使用這段記憶體是會出錯(硬體錯誤)。
2.申請兩段記憶體,每段不超過設定值,但總和超過設定值。
p = (char *)malloc(sizeof(char)*3090);
if(p== null)
p2 = (char *)malloc(sizeof(char)*3090);
if(p2== null)
3.申請一段記憶體,使用完畢後釋放掉,然後再申請一段記憶體
p = (char *)malloc(sizeof(char)*3090);
if(p== null)
...free(p);
p2 = (char *)malloc(sizeof(char)*3090);
if(p2== null)
...free(p2);
使用正常。
申請記憶體,使用完畢後要釋放。
iar設定堆疊大小 option->linker -> config -> override default ->edit。
stm32記憶體分配
原文 1 棧區 stack 由編譯器自動分配和釋放,存放函式的引數值 區域性變數的值等,其操作方式類似 於資料結構中的棧。2 堆區 heap 一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由作業系統 分配 方式類似於資料結構中的鍊錶。3 全域性區 靜態區 static 全域性變數和靜...
STM32的記憶體分配
使用keil編寫 區域性變數和全域性變數分別存放在什麼地方?在乙個函式內部定義的變數是內部變數,它只在本函式範圍內有效,也就是說只有在本函式內才能使用它們,在此函式以外是不能使用這些變數的,這稱為區域性變數。使用區域性變數注意以下問題 不同函式中可以使用相同名字的變數,它們代表不同的物件,互不干擾。...
STM32記憶體使用及分配
stack size,一般小工程0x400足夠,我們綜合實驗才設定0x1000就夠用,所以預設無需設定太大。stack size的值根據你程式中區域性變數最大尺寸計算,heap size,如果沒有用到標準庫的malloc,就是廢物,純屬浪費記憶體,所以直接設定為0即可。heap size的值如果程式...