1、程序和数据存储位置
(1)PC和单片机区别
x86的PC机cpu在运行时程序是存储在RAM中,而单片机等嵌入式系统则是存在flash中的。
pc机在运行程序的时候将程序从外存(硬盘)中,调入到RAM中运行,cpu从RAM中读取程序和数据;而单片机的程序则是固化在flash中,cpu运行时直接从flash中读取程序,从RAM中读取数据 。
(2)单片机
RAM用于数据的存储,用flash的话比如我要对某字节存储,那么就需要把整页都擦除,其他地方的数据要保留就得进行缓存。裸机程序指令就在Flash(Flash memory)中存放,而数据就放在了RAM中(flash的写入次数有限制,同时它的速度和RAM还是差很多)。更广泛说,在单片机上RAM存放data段,bss段,堆栈段;ROM(EPROM,EEPROM,Flash等非易失性存储设备)存放代码,只读数据段。
2、堆区和栈区
- 从静态存储区域分配:它是由编译器自动分配和释放的,即内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,直到整个程序运行结束时才被释放,如全局变量与 static 变量。
- 在栈上分配:它同样也是由编译器自动分配和释放的,即在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元将被自动释放。需要注意的是,栈内存分配运算内置于处理器的指令集中,它的运行效率一般很高,但是分配的内存容量有限。
- 从堆上分配:也被称为动态内存分配,它是由程序员手动完成申请和释放的。即程序在运行的时候由程序员使用内存分配函数(如 malloc 函数、new)来申请任意多少的内存,使用完之后再由程序员自己负责使用内存释放函数(如 free 函数、delete)来释放内存。也就是说,动态内存的整个生存期是由程序员自己决定的,使用非常灵活。需要注意的是,如果在堆上分配了内存空间,就必须及时释放它,否则将会导致运行的程序出现内存泄漏等错误

最低0.47元/天 解锁文章

11万+

被折叠的 条评论
为什么被折叠?



