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中的)
编译的过程:
C语言随笔2: rom ram 及其运行的过程的更多相关文章
- Linux方案级ROM/RAM优化记录
关键词:readelf.bloat-o-meter.graph-size.totalram_pages.reserved.meminfo.PSS.procrank.maps等等. 根据项目的需求,进行 ...
- nandflash,norflash,sdram,emmc,rom,ram等各种存储器识别
老是被nandflash,norflash,sdram,emmc,rom,ram搞混,所以在这里总结一下,也为了更好的分清他们之间的关系,以至于别人问的时候不至于说不清. 我们不谈这些名次的由来,只说 ...
- 到底什么是nandflash,norflash,sdram,emmc,rom,ram【转】
本文转载自:http://blog.sina.com.cn/s/blog_6dd8f2b70101le26.html 最近被nandflash,norflash,sdram,emmc,rom,ram搞 ...
- 链接脚本(Linker Script)应用实例(一)使用copy table将函数载入到RAM中运行
将函数载入到RAM中运行需要以下三个步骤: (1)用编译器命令#pragma section "<section name>" <user functions&g ...
- ROM, RAM, NVRAM and Flash Memory on Cisco Routers
当谈到路由器有多少内存以及哪些内存做什么时,有时人们会感到困惑. 您应该熟悉4个内存术语,在升级路由器的IOS之前应检查其中2个. 这些是以下内容: ROM:ROM代表只读存储器. 它存储System ...
- PHP语言学习之php-fpm 三种运行模式
本文主要向大家介绍了PHP语言学习之php-fpm 三种运行模式,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. php-fpm配置 配置文件:php-fpm.conf 开启慢日志功能的 ...
- keil 编译器V6 定义函数在ram中运行-和在指定地址定义常量
之前一直是用v5编译,编译速度慢,换成V6编译速度差不多快50% ,而且arm后期只维护v5编译器不在更新v5编译器.切换到V6编译器大势所趋,把之前v5且换到v6需要如下更改: 1. CMSIS包需 ...
- Java程序编译和运行的过程
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode) 2 ...
- Java程序编译和运行的过程【转】
转自:http://www.360doc.com/content/14/0218/23/9440338_353675002.shtml Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来 ...
随机推荐
- mybatis一对多 多对一 多对多
https://blog.csdn.net/AdminGuan/article/details/98952484 Mybatis的Mapper该如何编写多对一? 很简单,就是在resultMap标 ...
- [Java IO]05_JSON操作
目录 6.1 JSON 知识背景 6.1.1 JSON 简介 6.1.2 JSON 语法 6.1.3 JSON 的数据结构6.2 Java 中操作 JSON 数据 6.2.1 Jar包下载 ...
- Python常用的类库、对应的方法和属性
Python常用的类库.对应的方法和属性
- style.display = "inline或inline";和style.display = "";的区别
function a(){ if($('#b').attr('checked')){ $('.c').css("display",""); //"di ...
- TD - setAttribute()
添加指定的属性,并为其赋指定的值 this.sltLevelType.setAttribute("height", "100px");
- Java传(2)
__________________________夜夜都是魂牵梦绕. 题目: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月有生一对兔子,假如兔子都不死,问每个月的兔子 ...
- codeforces Codeforces Round #597 (Div. 2) B. Restricted RPS 暴力模拟
#include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; int main() { int t; ...
- totensor方法和normalize方法 数值映射和归一化
totensor方法和normalize方法 数值映射和归一化 待办 ToTensor是指把PIL.Image(RGB) 或者numpy.ndarray(H x W x C) 从0到255的值映射到0 ...
- GoAhead WebServer 架构
https://blog.csdn.net/jungsagacity/article/details/7307012
- js对象冒充实现的继承
//人类 function Person(name) { this.name = name; this.showName = function () { console.log("my na ...