从OS上看
Linux系统上,代码和数据都在DRAM中运行,属于冯诺依曼结构。
单片机裸机上,代码在flash中运行,程序中涉及的数据(全局变量、局部变量)放在SRAM中,属于哈弗结构。
内存存储可变数据,在程序中表现为全局变量、局部变量(在gcc,常量也存储在内存中)(大部分单片机常量存储在flash,也就是在代码段)。
有OS,OS管理内存,我们用API来管理内存,譬如malloc、free。
无OS,程序员自己管理内存。
从语言上看
汇编,没有内存管理,内存管理靠程序员自己,直接操作内存地址。
C语言,编译器帮我们管理直接内存地址,我们通过编译器提供的变量名等访问内存。如果需要大块内存,有操作系统可以使用API如malloc、free来访问内存。裸机程序需要大块内存需要自己定义数组等来解决。
C++语言,对内存进一步封装。用new创建对象,使用delete删除对象。但是C++管理还是靠程序员自己,注意内存泄漏。
Java/C#,不直接操作内存,通过虚拟机来操作内存。不需要程序员考虑内存的问题。