C语言内存分配

   嵌入式 C程序开发中,时刻离不开内存的分配,嵌入式系统的内存控件由于价格因素,内存空间满足一般需求就可以,合理的使用堆栈,避免不合理使用堆,导致内存泄漏,最终导致程序崩溃。

  内存泄漏(Memory Leak):程序中己动态分配的堆内存由于某种原因程序未释放或无法释放(谁分配 ,谁释放),造成系统内存的浪费。内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的情况下可能使系统崩溃。

1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。

2.堆区(heap):一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。注堆和数据结构中的堆栈不一样,其类是与链表

 

案例分析:STM32编译生成文件分析

  HEX文件包括地址信息而bin文件文件是不包括地址信息的,而BIN文件格式只包括了数据本身在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN 文件的时候,用户是一定需要指定地址。

 在stm32工程使用keil编译之后,keil的build output栏目下面会出现如图所示的输出信息,其中会显示code 大小

 RO-data、RW-data 、ZI-data的大小:

 CODE:执行的代码,程序中所有的函数都位于此处。

 RO-DATA :只读数据,程序中所定义的全局常量数据和字符串都位于此处。

 RW-data 代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。

 ZI-data 代表未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量位于此处。ZI英语是zero initial,就是程序中用到的变量并且被系统初始化为0的变量的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。

 

 

 


你可能感兴趣的:(C语言内存分配)