ROM区域是0x8000000开始,大小是0x10000,这片区域是只读区域,不可修改,存放代码区和常量区。 RAM区域是0x20000000开始,大小是0x5000,这片区域是可读写区域,存放的是全局(静态)区、堆区和栈区。 该芯片的内部分区如下图所示: 三、基于STM32代码验证 1. 详细代码如下 #include "main.h" #include <string.h> /...
本文使用是STM32F103芯片,keil V5环境下默认的内存配置见下图: ROM区域是0x8000000开始,大小是0x10000,这片区域是只读区域,不可修改,存放代码区和常量区。 RAM区域是0x20000000开始,大小是0x5000,这片区域是可读写区域,存放的是全局(静态)区、堆区和栈区。 该芯片的内部分区如下图所示: 三、基于STM32代码验证 1...
最简单、通俗地理解就是把它们想象为一所房子,其中包括:代码区(Code Area)、全局区(Global Area)、栈区(Stack Area)、堆区(Heap Area)。其中,代码区是存放你的程序的执行指令,如同房子的设计蓝图,指导程序如何运行。 接下来我们将详细解构每个“区域”,以便深入理解其工作原理和使用场景。 一、代码区 代码区,又...
1 代码区 存放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。总结:你所写的所有代码都会放入...
bss段:已经定义但没赋初值的全局变量和静态变量存放在这个区域。 两者之间区别是:代码段,数据段,堆栈段是cpu级别的概念,五大分区属于语言级别的概念,两者是不同的概念。 三、可执行程序内存空间与逻辑地址空间的映射与划分 左边是UNIX系统的执行文件,右边是进程对应的逻辑地址空间的划分情况 ...
ROM区域是0x8000000开始,大小是0x10000,这片区域是只读区域,不可修改,存放代码区和常量区。 RAM区域是0x20000000开始,大小是0x5000,这片区域是可读写区域,存放的是全局(静态)区、堆区和栈区。 该芯片的内部分区如下图所示: 三、基于STM32代码验证 1. 详细代码如下 ...
1.代码区(.text): 该区域主要存放二进制可执行文件。 2.数据区(.data): 数据区可详细分为三块区域,分别是只读数据区、初始化数据区、未初始化数据区。 1). 只读数据区(.ordata) : 顾名思义,这个区域存放的是一些常量,包括字符串常量、const修饰的全局变量; ...
一、代码区 存放CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。 代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。 总结:你所写的所有代码都会放入到...
在C语言中,定义了4个内存区间:代码区;全局变量和静态变量区;局部变量区即栈区;动态存储区,即堆区;具体如下: 1>栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2>堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收...
栈(Stack):栈是一种自动分配和释放内存的区域,用于存储函数的局部变量、函数参数、返回值等。栈内存的分配和释放是由编译器自动完成的,它的大小是固定的。当函数调用结束时,栈上分配的内存会自动释放。 #include"stdio.h" #include"stdlib.h" voidtest_1(unsignedchardata_1,unsignedintdata_2,unsignedchardata_...