一般內存中主要分為:代碼區、常量區、靜態區(全局區)、堆區、棧區。內存示意圖:
棧區:存放函數內的局部變量、形參和函數返回值。系統會自動管理
堆區:由malloc()主動申請、使用free()主動釋放
靜態區(全局區):靜態變量和全局變量,一旦靜態區的內存被分配,靜態區的內存直到程序全部結束才會釋放
常量區:存放常量(例如:10、字符串常量“abcdd”等)
代碼區:存放程序代碼
程序例子:
int a = 0; //全局初始化區
char *p1 //全局未初始化區
int main()
{
int b; //棧
char s[]= "abc"; //棧
char *p2; //棧
char *p3 = "123456"; //p3在棧上,“123456”在常量區
static int c = 0; //全局初始化區
p1 = (char *)malloc(10); //堆區分配空間
strcpy(p1, "123456");
}
stm32 內存配置:
默認分配的ROM區域是0x8000000開始,大小是0x20000的一片區域,那么這篇區域是只讀區域,不可修改,也就是存放的代碼區和常量區。
默認分配的RAM區域是0x20000000開始,大小是0x4000的一片區域,這篇區域是可讀寫區域,存放的是靜態區、棧區和堆區。該芯片的內部分區如下圖所示:
總結:
大小端:
1.小端模式:低字節存在低地址上,高字節存在高地址上。
2.大端模式:低字節存在高地址上,高字節存在低地址上。