[C语言] 经常听人说程序在RAM中运行,这句话是不是有问题?

[复制链接]
4738|16
 楼主| 6688hyc 发表于 2017-11-3 16:45 | 显示全部楼层 |阅读模式
程序怎么能在RAM里运行呢?
程序不是应该在CPU里执行么????
gujiamao12345 发表于 2017-11-3 16:59 | 显示全部楼层

那你把你电脑ddr拔了,看能不能继续回答我的问题
feelhyq 发表于 2017-11-3 17:36 | 显示全部楼层
gujiamao12345 发表于 2017-11-3 16:59
那你把你电脑ddr拔了,看能不能继续回答我的问题

拔掉了 不也可以运行吗?
feelhyq 发表于 2017-11-3 17:41 | 显示全部楼层
程序在哪里运行要看是芯片架构,比如说STM32, code bus和data bus连接到了SRAM上面,那么SRAM里面除了放通常用的数据 还可以放代码。但是更多的,比如说51单片(加入RAM足够大),它的RAM里面是不能放程序的,因为51单片机 RAM没有与 code bus连接。

至于经常听人说程序放在RAM里面运行,通常的工作环境是 跑很大型的操作系统,比如说linux,像跑UCOS这种小的OS,芯片内部的NOR FALSH容量足够大,基本上不会放到RAM里面去运行

评论

精辟  发表于 2017-11-3 21:44
gujiamao12345 发表于 2017-11-3 18:10 | 显示全部楼层
feelhyq 发表于 2017-11-3 17:41
程序在哪里运行要看是芯片架构,比如说STM32, code bus和data bus连接到了SRAM上面,那么SRAM里面除了放通 ...


LZ的RAM的意思可能是通用的内存..。
资深技术 发表于 2017-11-3 23:33 | 显示全部楼层
准确说,楼主是对的。
太多教科书都说在RAM里运行,这是泛指电脑在运行程序时需要从硬盘把程序读到RAM里,或者是处理芯片(cpu,arm,dsp等)要从ROM(flash)里读出指令到RAM里运行,这是不严谨的。
CPU从RAM存取指令,或是直接从ROM(flash)里读取指令,依照指令运行,所以真正的运行是在CPU里。
whtwhtw 发表于 2017-11-4 15:05 | 显示全部楼层
正常情况下指令是放在flash中的,执行程序时候是读一句flash指令,CPU执行一条指令。
经常听人说程序在RAM中运行是指把flash中的程序在执行的时候全部读入RAM中,然后从RAM中读取一条指令,CPU执行一条指令
whtwhtw 发表于 2017-11-4 15:08 | 显示全部楼层
经常听人说程序在RAM中运行,其优点有2个,一是操作FLASH读写的程序,如果不把这部分代码放入RAM中,flash又要读取指令又要操作它自身,操作读写的时候会读不到指令而死机;
二,代码放入RAM能加速指令执行时间,比代码在flash中快。
McuPlayer 发表于 2017-11-4 22:33 | 显示全部楼层
flash的读取速度较低,RAM读取速度高,这时可以把需要高速执行的代码提前copy到RAM中执行
雪山飞狐D 发表于 2017-11-5 18:17 | 显示全部楼层
    把中断向量表和代码拷进RAM里面,然后可以对flash里面的原代码进行在线升级或者格式化,或者拷进SD卡之类外部存储器,执行特定程序
linqing171 发表于 2017-11-5 20:30 | 显示全部楼层
严谨一点来说应该是   cpu  从 RAM 中取的指令,  CPU  从 Flash 中取的指令。
不过我感觉  好像是英文手册里面,运行效率的章节 也都是 说   程序在RAM中运行。
wx85105157 发表于 2017-11-5 22:11 | 显示全部楼层
feelhyq 发表于 2017-11-3 17:41
程序在哪里运行要看是芯片架构,比如说STM32, code bus和data bus连接到了SRAM上面,那么SRAM里面除了放通 ...

说的不错,但是需要补充下,像是最低端的stm8s003s也有ram运行代码的能力,是因为他的iap烧写flash的时候,是不能从flash里面运行代码的。
oayzw 发表于 2017-11-6 11:24 | 显示全部楼层
本帖最后由 oayzw 于 2017-11-6 11:31 编辑

绝大多数单片机芯片内包括了CPU、ROM\RAM,CPU从ROM(通常是FLASH)中取指运行程序
PC的CPU和RAM是二个物理部件,通常先把程序(从硬盘、光盘等)拷贝到RAM中,CPU再从RAM中取指令运行

潜力变实力 发表于 2017-11-6 15:28 | 显示全部楼层

flash的读取速度较低,RAM读取速度高,这时可以把需要高速执行的代码提前copy到RAM中,然后CPU再从RAM中取指令运行!!实际运行是在CPU里面,RAM只是起到存储的作用。
一往直前 发表于 2017-11-6 18:28 | 显示全部楼层
在RAM里面运行的是临时的数据,就是你程序运行的临时数据。掉电就挂了
liruikun 发表于 2017-11-7 08:49 | 显示全部楼层
学到了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

278

主题

1323

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部