Programação

Memória RAM e HD: qual é a diferença e como funcionam

Atualizado em

Capa do artigo Memória RAM e HD: qual é a diferença e como funcionam
Leitura com foco

Entenda o contexto.
Leve para a prática.

Neste artigo
  1. O que é a memória RAM?
  2. O que é o HD?
  3. Qual é a diferença entre memória RAM e HD?
  4. Por que eu perco o trabalho quando não salvo?
  5. Como a memória RAM e o disco aparecem em um programa?
  6. Aí você pergunta: como um HD consegue guardar os dados?
  7. Quais são os erros mais comuns com memória e arquivos?
  8. Agora é com você!

A memória RAM guarda o que o computador está usando agora e perde tudo quando falta energia. O HD guarda os programas e os arquivos e mantém tudo, mesmo com o computador desligado.

No artigo Como funciona um computador: entrada, processamento e saída, ficou faltando uma quarta peça: o armazenamento. A partir de agora vou usar também os termos em inglês, porque você vai repetir tanto que eles viram rotina: entrada é Input, processamento é Process, saída é Output e armazenamento é Storage.

Imagine que você pegou uma fruta que nunca tinha comido. Você dá uma mordida (input), mastiga e sente o sabor (process) e, antes de engolir ou cuspir (output), o seu cérebro guarda aquele sabor na memória e busca, na memória antiga, se ele é bom ou ruim. O computador também tem duas memórias: uma de curto prazo, a memória RAM, e uma de longo prazo, o HD, que é o disco rígido.

O que é a memória RAM?

É a memória principal do computador. RAM vem de Random Access Memory. Ela guarda as instruções dos programas que estão sendo executados e os dados que eles estão usando. É de lá que o processador busca o que precisa.

Ela tem duas marcas. É rápida. E é volátil: precisa de energia para manter o que guarda. Faltou energia, a informação se perde.

O que é o HD?

É o armazenamento secundário, a memória de longa duração. Ele guarda os programas e os arquivos e não é volátil: o que foi gravado continua lá sem energia. Em geral ele é mais lento que a memória RAM, mais barato e, por isso, costuma ter mais espaço.

E o SSD? Por muito tempo o HD foi o principal armazenamento secundário dos computadores. O SSD faz o mesmo papel com outra construção. O HD tem partes mecânicas: discos que giram e cabeças de leitura e escrita. O SSD guarda os dados em memória flash e não tem partes móveis, o que deixa a leitura bem mais rápida. Em troca, o custo por unidade de armazenamento é mais alto. O que este artigo diz sobre o HD como memória de longo prazo vale também para o SSD.

Comparação entre a memória RAM, de curto prazo, mais rápida e volátil, e o HD, de longo prazo, com mais espaço e não volátil
A memória RAM e o HD lado a lado: uma trabalha com o que está em uso, o outro guarda o que precisa durar.

Qual é a diferença entre memória RAM e HD?

Memória RAMHD
Papelmemória principalarmazenamento secundário
O que guardaprogramas e dados em uso agoraprogramas e arquivos, por longo tempo
Velocidademais rápidamais lento
Sem energiaperde a informação (volátil)mantém a informação (não volátil)
Preço e espaçomais cara, com menos espaçogeralmente mais barato, com mais espaço
Memória RAM e HD, lado a lado.

Os dois trabalham juntos. Quando você manda executar um programa, ele normalmente é carregado do HD para a memória RAM. Com o sistema operacional é igual: ele fica gravado no disco e é copiado para a memória quando o computador é ligado.

Por que eu perco o trabalho quando não salvo?

Quando você abre um arquivo em um editor, o conteúdo é carregado na memória. É ali que você edita. Quando você manda salvar, o conteúdo atualizado é gravado no disco. E quando o programa é fechado, o espaço que ele ocupava na memória é liberado.

Fluxo de abrir, editar e salvar: o arquivo sai do HD para a memória RAM ao abrir, é editado na memória e volta para o HD ao salvar
O caminho de um arquivo: sai do disco ao abrir, é editado na memória RAM e só volta para o disco quando você salva.

Você já deve ter passado por isso: estava editando uma foto no celular, fechou o programa sem querer, sem salvar, e perdeu toda a edição. Ou estava escrevendo um texto, não apertou o botão salvar e o celular descarregou. As mudanças estavam só na memória de curto prazo. Sacou agora a diferença entre a memória fixa e a memória de curto prazo?

Como a memória RAM e o disco aparecem em um programa?

Uma variável é uma posição na memória que tem um nome e um valor, como você pode ver em conceitos básicos de programação. Um arquivo fica no disco. O programa abaixo tem dois contadores: um mora só em uma variável, o outro é salvo em um arquivo chamado contador.txt. Cada vez que o programa roda, ele soma 1 nos dois.

Em Python:

# Memória RAM e disco: o que some e o que fica
import os

ARQUIVO = "contador.txt"

contador_na_memoria = 0     # variável: fica na memória RAM
contador_no_disco = 0

if os.path.exists(ARQUIVO):             # já existe um valor salvo?
    with open(ARQUIVO) as arquivo:
        contador_no_disco = int(arquivo.read())

contador_na_memoria = contador_na_memoria + 1
contador_no_disco = contador_no_disco + 1

with open(ARQUIVO, "w") as arquivo:     # salva no disco
    arquivo.write(str(contador_no_disco))

print("Contador na memória: %d" % contador_na_memoria)
print("Contador no disco: %d" % contador_no_disco)

Em PHP:

<?php
// Memória RAM e disco: o que some e o que fica

$arquivo = "contador.txt";

$contador_na_memoria = 0;   // variável: fica na memória RAM
$contador_no_disco = 0;

if (file_exists($arquivo)) {            // já existe um valor salvo?
    $contador_no_disco = (int) file_get_contents($arquivo);
}

$contador_na_memoria = $contador_na_memoria + 1;
$contador_no_disco = $contador_no_disco + 1;

file_put_contents($arquivo, $contador_no_disco);    // salva no disco

printf("Contador na memória: %d\n", $contador_na_memoria);
printf("Contador no disco: %d\n", $contador_no_disco);

Em C:

/* Memória RAM e disco: o que some e o que fica */
#include <stdio.h>

int main(void) {
    int contador_na_memoria = 0;    /* variável: fica na memória RAM */
    int contador_no_disco = 0;

    FILE *arquivo = fopen("contador.txt", "r");
    if (arquivo != NULL) {                  /* já existe um valor salvo? */
        fscanf(arquivo, "%d", &contador_no_disco);
        fclose(arquivo);
    }

    contador_na_memoria = contador_na_memoria + 1;
    contador_no_disco = contador_no_disco + 1;

    arquivo = fopen("contador.txt", "w");   /* salva no disco */
    fprintf(arquivo, "%d", contador_no_disco);
    fclose(arquivo);

    printf("Contador na memória: %d\n", contador_na_memoria);
    printf("Contador no disco: %d\n", contador_no_disco);
    return 0;
}

Rodei o programa três vezes seguidas. A saída das três execuções, uma embaixo da outra, é igual nas três linguagens:

Contador na memória: 1
Contador no disco: 1
Contador na memória: 1
Contador no disco: 2
Contador na memória: 1
Contador no disco: 3

Quem diria: o contador da variável não sai do 1. Toda vez que o programa começa, a variável é criada de novo com 0, soma 1 e, quando o programa termina, ela some. O contador do arquivo continua de onde parou: 1, 2, 3.

  • Ler do disco: o programa pergunta se o arquivo existe. Se existe, lê o que está gravado nele e transforma em número. Em Python, o read devolve texto, por isso o int. Em C, o fopen devolve NULL quando não consegue abrir o arquivo, por isso o teste antes de ler.
  • Somar: as duas contas acontecem nas variáveis, na memória.
  • Salvar no disco: o programa abre o arquivo para escrita e grava o novo valor. Em Python, o write só aceita texto, por isso o str. Em PHP, o file_put_contents cria o arquivo se ele não existir e escreve por cima se existir. Em C, o fprintf é para o arquivo o que o printf é para a tela.
Ver a animação: três execuções do programa
Animação de três execuções do programa: as variáveis na memória RAM somem ao fim de cada execução e o arquivo contador.txt no disco guarda 1, 2 e 3
A cada execução as variáveis nascem e somem. O arquivo contador.txt continua no disco, com 1, depois 2, depois 3.

Fiz mais dois testes. Apaguei o arquivo contador.txt e rodei de novo: o contador do disco voltou para 1. Depois rodei uma vez em cada linguagem, na mesma pasta: o Python mostrou 1, o PHP mostrou 2 e o C mostrou 3. O arquivo não sabe em qual linguagem foi gravado. Foque no conceito, e não na linguagem!

Aí você pergunta: como um HD consegue guardar os dados?

Dentro do HD existem discos recobertos de material magnético, chamados de pratos. Cada prato é dividido em trilhas, e cada trilha é dividida em setores. Os dados são gravados pela magnetização desse material: são as mudanças na direção da magnetização que representam os bits.

E o que é um bit? É um dígito binário: só pode ser 0 ou 1. Toda informação que o computador guarda é representada assim. Por isso muita gente fala que o computador é “burro”: ele só entende zeros e uns. As fotos, os áudios, os textos e os ícones do seu celular, no final das contas, são zeros e uns. Oito bits formam um byte, e essa história continua no artigo Memória dos nossos Bits e Bytes de cada dia.

Quais são os erros mais comuns com memória e arquivos?

  • Achar que a variável guarda o valor para sempre. Tirei do programa em Python as duas linhas que salvam o arquivo e rodei duas vezes: o contador do disco mostrou 1 e 1. Sem salvar, nada fica.
  • Esquecer que o arquivo guarda texto. Em Python e em PHP, o que vem do arquivo chega como texto e precisa virar número antes da conta. O que vai para o arquivo, em Python, precisa virar texto antes de ser gravado.
  • Confiar no que está no arquivo. Escrevi abc dentro do contador.txt. O Python parou com a mensagem ValueError: invalid literal for int() with base 10: ‘abc\n’. O PHP e o C não reclamaram e mostraram o contador do disco em 1.
  • Abrir para escrita sem querer apagar. Em Python, abrir um arquivo no modo “w” apaga o que existia nele.
  • Em C, usar o arquivo sem testar o fopen. Se o fopen devolver NULL, o arquivo não foi aberto.

Agora é com você!

No papel: diga onde está cada coisa, na memória RAM ou no disco: uma foto guardada na galeria, um texto que você está digitando e ainda não salvou, um jogo aberto neste momento e o sistema operacional com o computador desligado.

No computador: escolha uma das três linguagens e mude o programa para somar de 10 em 10. Rode três vezes, apague o arquivo contador.txt e rode de novo. Antes de cada execução, escreva no papel o que você espera ver. Tente sozinho, sem pedir a resposta pronta para ninguém, nem para a IA!

Todos os programas que você vai desenvolver, no final das contas, viram zeros e uns para o computador. Como a gente conversa com uma máquina que só conhece zeros e uns? É o assunto do próximo artigo: Programar é conversar com o computador. Apenas Conversar!

Confiança Sempre!!!

Fontes:

Sobre quem escreve

Walmir Silva

Olá! Sou Walmir, engenheiro de software com MBA em Engenharia de Software e o cérebro por trás do GrowthCode e autor do livro "Além do Código".

Se você acha que programação é apenas sobre escrever código, prepare-se para expandir seus horizontes. Aqui, nós vamos além do código e exploramos as interseções fascinantes entre tecnologia, negócios, artes e filosofia.

Você está em busca de crescimento na carreira? Quer se destacar em um mercado competitivo? Almeja uma vida mais rica em conhecimento e realização? Então você chegou ao lugar certo. No GrowthCode, oferecemos insights profundos, estratégias comprovadas e um toque de sabedoria filosófica para catalisar seu crescimento pessoal e profissional.

Ver todos os artigos →

Continue a conversa

Compartilhe sua perspectiva

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Encontre sua próxima resposta

O que você quer aprender?

Preferências de cookies

Os cookies opcionais começam desligados. Você pode mudar a escolha a qualquer momento por esta tela.

NecessáriosSempre ativos

Guardam a sua escolha de cookies e mantêm o site funcionando. Não são usados para publicidade.

Contam visitas e mostram como o site é usado: Google Analytics e Microsoft Clarity, carregados pelo Google Tag Manager. Como esse contêiner também carrega tags de publicidade, as estatísticas só são ativadas junto com Publicidade e marketing.

Exibem anúncios do Google AdSense e medem campanhas e e-mails: pixels da Meta e do TikTok e o Mautic.

Permite que o Google escolha anúncios com base nos seus interesses. Desligado, os anúncios aparecem sem personalização. Depende de Publicidade e marketing.

Também é possível bloquear cookies nas configurações do navegador. Detalhes na Política de privacidade.