一个由C/C++编译的程序占用的内存分为以下几个部分:
栈区(stack):编译器自动分配释放,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈。
堆区(heap):一般由程序员分配释放,
若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
程序代码区—存放函数体的二进制代码
编译后,各个区存储内容举例说明如下:
//main.cpp
int a = 0; //全局初始化区
char *p1; //全局未初始化区
int main()
{
int b; //栈
char s[] = “abc”; //栈
char *p2; //栈
char *p3 = “123456”;// 123456 在常量区,p3在栈上
static int c =0; //全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
//分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); //123456 放在常量区,编译器可能会将它与p3所指向的"123456" 优化成一个地方。
}
关键字:STM32 学习笔记 堆栈区
引用地址:
STM32学习笔记-STM32堆栈区(一)
推荐阅读最新更新时间:2024-10-23 03:28
STM32学习笔记-STM32堆栈区(一)
一个由C/C++编译的程序占用的内存分为以下几个部分: 栈区(stack):编译器自动分配释放,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈。 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。 文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 程序代码区—存放函数体的二进制代码 编译后,各个区存储内容举例说明如下:
[单片机]
STM32学习笔记-STM32堆栈区(二)
STM32的分区 STM32的分区从0x2000 0000(0x2000 0000是SRAM的起始地址,由此可知,堆栈等都是在RAM中的)开始。静态区,堆,栈。所有的全局变量,包括静态变量之类的,全部存储在静态存储区。 紧跟静态存储区之后的,是堆区(如没用到malloc,则没有该区),之后是栈区,栈在程序中存储局部变量。 先看启动文件startup_stm32f10x_md.s的定义: ; Amount of memory (in bytes) allocated for Stack ; Tailor this value to your application needs ; h Stack Configurat
[单片机]
STM32学习笔记之堆栈空间
1.堆和栈大小 定义大小在startup_stm32f2xx.s Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp ; h Heap Configuration ; o Heap Size (in Bytes) 0x0-0xFFFFFFFF:8 ; /h Heap_Size EQU 0x00000200 AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base
[单片机]
stm32学习笔记之堆栈的理解
1.堆和栈大小 定义大小在startup_stm32f2xx.s Stack_Size EQU 0x00000800 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp ; Heap Configuration ; Heap Size (in Bytes) 0x0-0xFFFFFFFF:8 ; Heap_Size EQU 0x00000800 AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base 2.堆
[单片机]
STM32的Code/RO/RW/ZI区、Flash/Ram的占用情况、堆栈大小的设置
以cortex-M3为例,例如STM32F103 这篇文章要讲2个问题: 1、编译出的程序(指令)、变量的存放位置、大小? 2、在代码和keil中,“堆、栈”两者的大小如何设置? keil编译完成后,会有提示,形如: Program Size: Code=1148 RO-data=424 RW-data=20 ZI-data=1636 其中: ① Code为代码,本质上就是一大堆ARM指令; ② RO为只读的数据,例如,char *name = TOM ;//TOM三个字符就存放在ROM中作为RO-DATA;又如,为了减小sin的计算量,把sin的各个值直接制作成表,const float sinVal =
[单片机]
STM32定义堆栈地址到ram区顶部
本设置针对stm32f103rbt6的设置,该 芯片 RAM大小为20kB,故RAM区地址范围为0x20000000—0x20005000,芯片信息如下图所示; 第一步: 设置.sct文件; ;************************************************************* ; *** Scatter-Loading Descrip ti on Filegenerated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x0002000
[单片机]
STM32定义堆栈地址到ram区顶部
本设置针对stm32f103rbt6的设置,该 芯片 RAM大小为20kB,故RAM区地址范围为0x20000000—0x20005000,芯片信息如下图所示; 第一步: 设置.sct文件; ;************************************************************* ; *** Scatter-Loading Descrip ti on Filegenerated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x0002000
[单片机]
ARM的堆栈学习笔记
以下是我在学习ARM指令中记录的关于堆栈方面的知识: 1、寄存器 R13 在 ARM 指令中常用作堆栈指针 2、对于 R13 寄存器来说,它对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。采用以下的记号来区分不同的物理寄存器: R13_ mode 其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。 3、寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应
[单片机]