※本記事は広告を含みます。
メモリ領域解説シリーズ
本記事は「メモリ領域解説」シリーズの1つです。
組み込み開発を学び始めると、次のような言葉をよく目にします。
- RAM
- ROM
- FLASH
初心者さんROMとFLASHって何が違うの?



プログラムはどこに保存されているの?



RAMは何に使われているの?
と疑問に思う人も多いのではないでしょうか。
この記事では、ROM・FLASH・RAMの違いと、組み込み開発における役割をわかりやすく解説します。



ROMとRAMは聞いたことがありますが、FLASHって何ですか?



いい質問だね。実はFLASHはROMの一種なんだ。



えっ、そうなんですか?



うん。まずはそれぞれの特徴を見ていこう。
ROM・FLASH・RAMの全体像
まずは全体のイメージを見てみましょう。
FLASH(ROM)
└ プログラムを保存
RAM
├ data領域
├ bss領域
├ heap
└ stack簡単に言うと、
- FLASH(ROM) → プログラムを保存する場所
- RAM → プログラム実行中に使う作業メモリ
です。
RAMとは
RAMは Random Access Memory の略で、プログラム実行中に使うメモリです。
特徴は次の通りです。
- 読み書きができる
- 電源を切ると内容が消える
- プログラムの実行中に使用される
例えば次のコード。
int x = 10;この変数 x は、実行中には RAM上に配置されます。
揮発性メモリと不揮発性メモリ



RAMってなんで電源切ると消えちゃうんですか?



RAMは“揮発性メモリ”だからだよ。電気で状態を保っているから、電源が切れると消えちゃうんだ



じゃあROMは消えないんですか?



そう。不揮発性メモリだから電源がなくても保持できるんだ
メモリは大きく次の2種類に分けられます。
- 揮発性メモリ
- 不揮発性メモリ
揮発性メモリとは、電源を切ると内容が消えてしまうメモリのことです。
一方、不揮発性メモリは、電源を切っても内容が保持されるメモリです。
揮発性メモリ → RAM
不揮発性メモリ → ROM / FLASH / EEPROM
RAMは揮発性メモリであるため、電源を切るとデータが消えてしまいます。
そのため、プログラムを保存する用途には向いていません。
一方、ROMやFLASHは不揮発性メモリであり、電源を切ってもデータが消えないため、
プログラムの保存に使用されます。
この違いがあるため、組み込みシステムでは「プログラムは不揮発メモリに保存し、実行時は揮発メモリを使う」という構造になっています。
ROMとは
ROMは Read Only Memory の略です。
本来は
読み出し専用メモリ
を意味します。
特徴
- 電源を切っても内容が消えない
- 基本的には書き換えない
組み込み開発では、ROMは
プログラムを保存する不揮発メモリ
という意味で使われることが多いです。
FLASHとは
FLASHメモリは、
電気的に書き換え可能なROM
です。
特徴
- 電源を切っても消えない
- 書き換え可能
- プログラムを書き込める
現在の多くのマイコンでは、
ROMとしてFLASHメモリが使われています。
本来のROMは書き換えできないメモリですが、現在の組み込み開発では、電気的に書き換え可能なFLASHメモリがROMとして使われています。



つまりROMとFLASHは同じなんですか?



完全に同じではないけど、実務ではほぼ同じ意味で使われることが多いね。



そうなんですね!



設計資料ではROMと書いてあっても、実際のハードウェアはFLASHだったりするよ。
EEPROMとは(補足)



EEPROMっていうのも聞いたことがあります



いいところに気づいたね。FLASHと同じ“書き換えできるROM”の仲間だよ



じゃあ何が違うんですか?



EEPROMは少量のデータを細かく書き換えるのが得意で、FLASHは大きなデータをまとめて扱うのが得意なんだ
FLASHメモリと似たものとして、EEPROMというメモリもあります。
EEPROMは
電気的に書き換え可能なROMの一種で、FLASHと同じく不揮発メモリです。
ROM
├ EEPROM
└ FLASH主な違いは次の通りです。
- EEPROM → 少量のデータを細かく書き換える用途
- FLASH → プログラムなどをまとめて扱う用途
そのため組み込み開発では、
- プログラム → FLASH
- 設定値など → EEPROM
のように使い分けられることがあります。
ROM・FLASH・RAM・EEPROMの違い
それぞれの違いを整理すると次の通りです。
| メモリ | 書き込み | 電源OFF | 用途 |
|---|---|---|---|
| RAM | 可能 | 消える | 作業メモリ |
| ROM | 基本不可 | 消えない | プログラム保存 |
| FLASH | 可能 | 消えない | プログラム保存 |
| EEPROM | 可能 | 消えない | 設定値保存など |
まとめると
- RAM → 作業メモリ
- ROM → 不揮発メモリ
- FLASH → 書き換え可能なメモリ
- EEPROM→書き換え可能で設定値など保存するメモリ
です。
起動時に何が起こるのか
組み込みプログラムでは、起動時に次のような処理が行われます。
FLASH
↓
初期値付き変数をコピー
↓
RAM (data領域)
例えば次のコード。
int g = 10;この 10 という初期値は
FLASHに保存されています。
そしてプログラム起動時に
FLASH → RAM
へコピーされます。
この処理は スタートアップコード が行っています。
スタートアップコードについてはこちらの記事で解説しています。
FLASHからRAMへのコピーについてはこちらの記事で解説しています。
RAMには種類がある(SRAMとDRAM)
RAMにはいくつか種類がありますが、代表的なのが次の2つです。
- SRAM(Static RAM)
- DRAM(Dynamic RAM)
それぞれ特徴が異なります。
SRAMとDRAMの違いの詳細についてはこちらの記事で解説しています。
| 種類 | 速度 | 価格 | 容量 | 用途 |
|---|---|---|---|---|
| SRAM | 速い | 高い | 小さい | マイコン内蔵RAM |
| DRAM | 遅い | 安い | 大きい | PCメインメモリ |
SRAMとは(組み込みで使うRAM)
SRAMは電源が入っている間、データを保持し続けるRAMです。
リフレッシュが不要で高速にアクセスできます。
そのため、
- マイコン内蔵RAM
- スタック領域
- ヒープ領域
- .data / .bss
などに使われます。
組み込み開発で「RAM」と言う場合、
多くはこの SRAM を指します。
DRAMとは(PCで使うRAM)
DRAMはデータを保持するために、
定期的にリフレッシュが必要なRAMです。
その代わり、
- 安価
- 大容量
という特徴があります。
そのためPCではメインメモリとして使われます。
例
- DDR4
- DDR5
- LPDDR
これらはすべてDRAMです。
なぜ組み込みはDRAMを使わないの?
理由は3つ。
①制御が複雑
②リフレッシュ必要
③リアルタイム性が悪い
つまり
「扱いにくい」
だからマイコンはSRAM内蔵が多い。
まとめ
ROM・FLASH・RAMの違いを整理すると次の通りです。
- RAM
プログラム実行中の作業メモリ(電源OFFで消える) - ROM
プログラムを保存する不揮発メモリ - FLASH
書き換え可能なROMで、多くのマイコンでROMとして使われる
組み込み開発では、
- FLASHにプログラムを保存し
- RAMを使ってプログラムを実行する
という構造になっています。
この記事が参考になった方へ
メモリ領域については他の記事でも解説しています。
技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。
小さなご相談からでもお気軽にご連絡ください。









コメント