メモリの種類~コマンドとCで確かめる~

コンピュータのしくみ
OSくん
OSくん

📝 2026年10月6日に全面リライトしました
2023年7月に公開した記事を、「つくって学ぶ」の趣旨に合わせて書き直した。コマンドとCプログラムで、メモリの種類と性質を実際に体験できる内容になっている

はじめに

メモリには、たくさんの種類がある。基本情報技術者試験でも押さえておきたいポイントは、次の3つである。

  • RAMとROMの違い
  • DRAMとSRAMの違い
  • フラッシュメモリ

文章を読むだけでなく、GitHub Codespaces(Ubuntu)で実際に確かめていく。コードは、筆者のGitHubリポジトリ pc-labo-hands-on の memory/ フォルダにまとめてある。

メモリの種類

RAMとROMの違い

RAMROM
正式名Random Access MemoryRead Only Memory
電源を切るとデータが消える(揮発性)データが残る(不揮発性)
書き込み自由にできる基本は読み出し専用
主な用途主記憶装置、キャッシュメモリ起動用のプログラム(ファームウェア)など

体験1:メモリの量を見る

free -h

OSが使えるメモリ(RAM)の合計、使用中、空きが表示される。

体験2:RAMとディスクの違いを見る

Linuxには、RAMを利用してファイルを保持する tmpfs という仕組みがあり、通常 /dev/shm にマウントされている。

echo "RAMに書いた" > /dev/shm/ram.txt
echo "ディスクに書いた" > ~/disk.txt
df -h /dev/shm ~

df の出力では、2つが別の領域だとわかる。/dev/shm のファイルは、再起動すると消える。ディスク上のファイルは残る。これが、揮発性と不揮発性の違いである。

DRAMとSRAMの違い

RAMには、大きく分けて2種類ある。

  • DRAM(Dynamic RAM):データが消えないように、1秒間に何度も電荷を加え直す(リフレッシュ)必要がある。安価で大容量にしやすく、主記憶装置に使われる
  • SRAM(Static RAM):リフレッシュが不要で、高速である。高価で大容量にしにくく、キャッシュメモリに使われる

体験3:キャッシュの大きさを見る

lscpu | grep -i cache

L1、L2、L3といったキャッシュの大きさが表示される。数MB程度と、主記憶に比べてとても小さいことがわかる。環境によっては、表示されない場合がある。

体験4:キャッシュの効果をCで測る

同じ量のデータを読むとき、読み方でキャッシュの効き方が変わる。cache.c として保存する。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N (64 * 1024 * 1024)  /* 整数6,400万個(約256MB) */

int main(void) {
    int *a = malloc(sizeof(int) * (size_t)N);
    if (a == NULL) return 1;
    for (size_t i = 0; i < N; i++) a[i] = 1;

    long sum = 0;

    clock_t t = clock();
    for (size_t i = 0; i < N; i++) sum += a[i];
    printf("順番に読む  : %.3f 秒\n", (double)(clock() - t) / CLOCKS_PER_SEC);

    t = clock();
    for (size_t s = 0; s < 16; s++)
        for (size_t i = s; i < N; i += 16) sum += a[i];
    printf("飛び飛びに読む: %.3f 秒\n", (double)(clock() - t) / CLOCKS_PER_SEC);

    printf("sum = %ld\n", sum);
    free(a);
    return 0;
}
gcc -O1 cache.c -o cache
./cache

どちらも同じ数の要素を読むが、順番に読むほうが速くなることが多い。メモリ上で近くにあるデータを連続して読むと、キャッシュの効果を受けやすいためである。
なお、差の大きさは、環境によって変わる。

なお、このプログラムは、約256MBのメモリを使う。

フラッシュメモリとは

電気的にデータを書き換えられる、不揮発性のメモリである。電源を切ってもデータが残るため、SSD、USBメモリ、SDカードの中身として使われている。ROMの仲間として扱われることもある。

まとめ

  • RAMは揮発性、ROMは不揮発性である
  • DRAMはリフレッシュが必要で主記憶に、SRAMは不要で高速なためキャッシュに使われる
  • フラッシュメモリは、書き換えできる不揮発性メモリである
  • free、/dev/shm、lscpu、Cのプログラムで、その違いを確認できた

更新履歴

  • 2026年10月6日:全面リライト(体験する内容に刷新)
  • 2023年7月1日:初版公開

コメント

タイトルとURLをコピーしました