C语言随笔2: rom ram 及其运行的过程

内存的分配方式

五个区 :堆区、栈区、全局区、文字常量区、程序代码区

这五个区是ram中的。或者说,堆栈段、数据段、代码段

而rom中,没有堆区和栈区,只有数据段和代码段。

ram是在程序运行是的内存

rom是程序烧录的地方

Flash(闪存)、EEprom,都是rom

Flash容量大,是程序存储器,按照块擦除,用于存储BootLoader和程序代码

E方是数据存储器,容量小,可以一次擦除一个字节(在有些项目中要求字节对齐,有最小擦除单位,例如四个字节)

一般E方大小是1k 几k

ram分

静态sram。是目前最读写快的存储器,静态的意思是不掉电不丢失数据

动态dram。它比sram慢,但依然比任何rom读写快,需要定时的刷新操作。

有一种说法,程序分为三部分  .data .code(text).bss

data是初始化的全局变量和静态局部变量

bss是未初始化的全局变量和静态局部变量   bss不占用内存,因为static的局部变量、未初始化的全局变量,初始值为0

   而在存储时没必要去存储这么多的0 。在生成可执行文件.exe 时 记录所需内存的大小。链接器从.exe文件中的得到bss的大小

   紧随在数据段的后面,由操作系统清0(它的初始化值不占用.EXE的空间)

code 是二进制程序代码与一些文字常量

ROM

.data

.code(.text)

RAM

.heap

.stack

.data

.code(text)   代码是存储在rom中的,但是运行时仍需要copy到ram中去,有些编译器会自动识别

       常用的代码并将其存储在ram中。另外,代码也可以直接在rom上运行,不过速度会

        慢一些(具有sram接口的norflash)

.constdata         文字常量区说法不一,不太重要,存储const常量与文字常量(有说文字常量存储在.code中的)

编译的过程:

原文地址:https://www.cnblogs.com/yyyyloveu/p/12219366.html

时间: 2024-11-10 07:49:06

C语言随笔2: rom ram 及其运行的过程的相关文章

ROM===RAM

RAM:RamdomAccessMemory易挥发性随机存取存储器,高速存取,读写时间相等,且与地址无关,如计算机内存等. ROM:Read Only Memory只读存储器. 断电后信息不丢失,如计算机启动用的BIOS芯片.存取速度很低,(较RAM而言)且不能改写.由于不能改写信息,不能升级,现已很少使用. ROM和RAM是计算机内存储器的两种型号: ROM表示的是只读存储器,即:它只能读出信息,不能写入信息,计算机关闭电源后其内的信息仍旧保存,一般用它存储固定的系统软件和字库等. RAM表示

到底什么是nandflash,norflash,sdram,emmc,rom,ram【转】

本文转载自:http://blog.sina.com.cn/s/blog_6dd8f2b70101le26.html 最近被nandflash,norflash,sdram,emmc,rom,ram搞的有点头大,所以在这里总结一下,也为了更好的分清他们之间的关系,以至于别人问的时候不至于说不清. 我们不谈这些名次的由来,只说明他们是做什么的,能用来干什么,在哪里我们用到过三部分说明 1.Nandflash 是flash非易失性闪存,即一种快速存储的芯片. 是用来存储数据的,类似于SD卡 是用于我

常见的几种语言C,C#,JAVA,Python的运行原理

相对于常见的几种语言C,C#,JAVA,Python的运行原理 由于CPU只能识别机器码,即我们常说的二进制码01010101 有任何语言在计算机上运行最终都要转化成CPU能够识别的机器码010101 对于C语言:通过C语言代码编译器将C语言写出的代码进行编译得到机器码,然后机器码就可以交给CPU去识别,即运行 对于其他语言:代码编译器将代码编译成字节码,然后通过各自的虚拟机将字节码进一步处理(转换)成机器码(0101010101),然后在处理器上运行 Python和C 首先Python是用C开

Java程序编译和运行的过程【转】

转自:http://www.360doc.com/content/14/0218/23/9440338_353675002.shtml Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode)  2.字节码由java虚拟机解释运行.因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-interpreted&quo

Java程序编译和运行的过程

Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode)  2.字节码由java虚拟机解释运行.因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi- interpreted" language). 图1   java程序编译运行过程 下面通过以下这个java程序,来说明java程序从编译到最后运行的整个

1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

1014 C语言文法定义与C程序的推导过程  程序:冒泡算法C程序(语法树)1 阅读并理解提供给大家的C语言文法文件. 2 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 3 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图(完整图片) 1 #include <stdio.h> 2 3 main() 4 { 5 int i,j,temp; 6 int a[10]; 7 8 for(i=0;i<10;i++) 9 scanf

Pychrm运行django过程中,报错 &quot;GET /c_hello?asker=backuper HTTP/1.1&quot; 404的原因

Pychrm运行django过程中,报错 "GET /c_hello?asker=backuper HTTP/1.1" 404,原因是django服务的启动端口被其他进程占用了, 1.在windows下cmd运行netstat -ano | find "8000"查找占用改端口的进程pid 2.查看下该pid是什么进程,tasklist | find "PID"决定是否杀掉 3.运行taskkill /PID pid -t -f杀掉进程 重新启动

C语言随笔1:内存分配方式与动静态变量

首先几个基本概念(网上的各种说法都很乱:个人理解整理了一下 内存分类方法很多,动态.静态:  五区:  三段: 内存的区: 1.动态存储区分为 栈区.堆区   也统称为堆栈段1.1栈区(stack) 编译器自动分配释放,存放函数的参数值,局部变量的值等.函数结束自动释放1.2堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由os回收 . new或者malloc出来的对象:(不释放导致内存泄漏) 2.静态区域分为 数据段(放数据).代码段(只读) 2.1 全局区(数据段)—

ROM, RAM 和 SDRAM的区别

ROM是只读内存(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器.其特性是一旦储存资料就无法再将之改变或删除.通常用在不需经常变更资料的电子或电脑系统中,资料并且不会因为电源关闭而消失 DRAM(Dynamic Random Access Memory),即动态随机存取存储器最为常见的系统内存.DRAM 只能将数据保持很短的时间.为了保持数据,DRAM使用电容存储,所以 必须隔一段时间刷新(refresh)一次,如果存储单元没有被刷新,存储的信息就会丢失.