一般内存中主要分为:代码区、常量区、静态区(全局区)、堆区、栈区。内存示意图:
栈区:存放函数内的局部变量、形参和函数返回值。系统会自动管理
堆区:由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.大端模式:低字节存在高地址上,高字节存在低地址上。