stack heap irom iram flash

在看rt_thread官方教程第二节的时候讲到了动态内存分配,因为概念不清晰所以上网查了一下,现在做一个小结。

stack

栈,是编译器自动分配和释放的。
例如:
局部变量
int a;
char str[];
char *p;
这个astr[],指针p都是在栈里面管理的

有个小例外
char *p = “12345”
这里的指针p在栈里面,但是它指向的内容12345呢是在常量区的
链接: 什么是代码区、常量区、静态区(全局区)、堆区、栈区?.

heap

堆,是程序员自己分配的。
malloc和free

int main(void)
{
        char *p ;
        p = "1234aa5";
        printf("%p: %s\n",p,p);

        char*a=NULL;//声明一个指向a的char*类型的指针
        a=(char*)malloc(100*sizeof(char));//使用malloc分配内存首地址,然后赋值给a
        if(!a)//如果malloc失败,可以得到一些log
        {
                perror("malloc");
                return-1;
        }
        sprintf(a,"%s","HelloWorld\n");//"HelloWorld\n"写入a指向的地址
        printf("%s\n",a);//输出用户输入的数据
        free(a);//释放掉使用的内存地址
        return 0;
}

动态内存区

就是stack和heap放置的地方了

静态内存区

里面放的是一些全局变量和被static修饰的变量

常量区

就是写代码的时候写死的一些常量,不能改的。

图像里面直观看iROM和iRAM

在这里插入图片描述

ROM 和 RAM

IROM : internal ROM
IRAM : internal RAM

ROM : READ ONLY MEMORY ,只读的存储器
RAM:RANDOM ACCESS MEMORY 随机访问的存储器(可读写)

其实IROM和IRAM本质上还是ROM和RAM。

ROM可以理解为写好的程序就丢在这里,掉电不会消失的。
RAM理解为运行内存,开机的时候程序是把自己搬到内存里面去运行的。

SRAM和DRAM

SRAM是static的RAM,DRAM是dynamic的RAM,本质上两个都是RAM,都是掉电失去内容的。
RAM里面的0和1是晶体管跟电容去控制的

1.SRAM的0跟1要很多个晶体管和电容去控制,比较复杂,带来的好处是速度快,不用频繁去刷新电路就可以存取了,而且不用初始化就能用了。

2.DRAM比SRAM简单,0跟1只要一个晶体管或者电容就可以控制了,结构简单,容量大,但是用时候要先初始化。

3.DRAM往上升级就是SDRAM,这个S是synchronize的意思,反正比DRAM更快更强了

4.网上就是DDR SDRAM ,double data rate SDRAM ,还有DDR2 DDR3 DDR4,越来越强的。

Flash

Flash指的是非易失闪存,可以理解向硬盘一样,但是又不能把它当成跟ROM一样,如果一样为什么要起不同的名字呢?

怎么去理解Flash?
链接: ROM, FLASH和RAM的区别.

Flash特性:

  1. 可擦除可编程,跟EEPROM一样

  2. 断电不会丢失

  3. 可以快速读取数据

  4. Flash跟EEPROM最大的区别是Flash按扇区操作,相对于EEPROM的改进就是擦除时不再以字节为单位,而是以块为单位

Flash有两种:

  1. NOR Flash

a. 用户可以直接运行装载在NOR Flash中的代码(主要是因为有XIP技术,片上执行,不像NAND flash得将代码复制到RAM中才可以执行),这样可以减少SRAM的容量从而节约了成本。

b. 地址线和数据线分开,可以实现RAM一样的随机寻址,可以读取任意一个字节

c. 但擦除还是要以块为单位

  1. NADN Flash

a. 数据线和地址线复用,不能利用地址线随机寻址。读取只能按页

总而言之,NOR flash和NAND flash比较,NOR可以支持随机访问,支持XIP,NAND不行;NOR容量小,读的比NAND快;NAND的容量较大,虽然读起来也快;NOR 写擦除都很慢,所以一般放代码段,而NAND写和擦除都很快,所以没有这个应用上的限制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值