Voltar para artigos
Artigo

Memória física vs. virtual

10/01/2026
Guilherme Rossi Kirsten
4 min de leitura

Entenda como memória física e virtual funcionam, por que existem e como essa camada invisível impacta segurança, multitarefa e performance.

Memória física vs. virtual

Entenda como memória física e virtual funcionam, por que existem e como essa camada invisível impacta segurança, multitarefa e performance.

Introdução

Você já pensou como funciona, de fato, um simples acesso à memória em C++? Um ponteiro parece apontar diretamente para a RAM, mas entre o código e o hardware existe uma camada complexa que traduz, protege e organiza cada acesso. Essa engrenagem invisível, a memória virtual, define limites de segurança, viabiliza multitarefa e impacta diretamente a performance. Entender esse caminho ajuda a explicar por que alguns acessos são instantâneos enquanto outros custam milhares de ciclos.

Ao executar new, o programa solicita memória ao sistema operacional, que reserva uma página virtual no espaço do processo. Esse endereço virtual ainda não aponta diretamente para a RAM, a tradução ocorre quando o valor é acessado. A CPU consulta a TLB (Translation Lookaside Buffer) para verificar se a tradução já é conhecida, em caso de falha, a MMU (Memory Management Unit) percorre a tabela de páginas. Se a página não estiver residente na memória física, ocorre um page fault, e o sistema operacional carrega os dados antes de permitir a continuação da execução.


Conceito Fundamental

Memória física é a RAM real instalada na máquina. Ela é finita, compartilhada e limitada pelo hardware.

Memória virtual é uma abstração criada pelo sistema operacional. Cada processo enxerga um espaço de endereços contínuo, privado e isolado — mesmo que, fisicamente, os dados estejam espalhados pela RAM ou até no disco.

Uma analogia útil:

  • Memória física é um prédio com salas reais.
  • Memória virtual é um mapa personalizado entregue a cada pessoa, garantindo que ninguém entre na sala errada, mesmo que todas usem o mesmo prédio.

Como Funciona na Prática

O fluxo básico de acesso à memória ocorre assim:

  1. Seu código gera um endereço virtual.
  2. A CPU envia esse endereço para a MMU (Memory Management Unit).
  3. A MMU tenta traduzir o endereço usando o TLB (Translation Lookaside Buffer), um cache de traduções recentes.
  4. Se não encontrar, consulta as tabelas de páginas mantidas pelo sistema operacional.
  5. O endereço virtual é convertido em um endereço físico na RAM.
  6. A CPU busca o dado seguindo a hierarquia:
  • Registradores
  • Cache L1 → L2 → L3
  • RAM
  1. Se a página não estiver na RAM, ocorre um page fault, e o SO carrega os dados do disco (swap).

Esse mecanismo permite isolamento, proteção e a ilusão de “memória infinita”.

Exemplo em C++

#include <iostream> // Inclui a biblioteca padrão de entrada/saída (cout, cin)
#include <vector>   // Inclui a biblioteca de vetores dinâmicos (std::vector)

int main() {
    // Cria um vetor chamado 'dados' com 1.000.000 elementos
    // todos elementos inicializados com o valor 42
    // std::vector aloca memória dinamicamente no heap
    // Cada elemento é um int (geralmente 4 bytes),
    // então aqui estamos alocando ~4MB de RAM
    std::vector<int> dados(1'000'000, 42);

    // Acessa o primeiro elemento do vetor (índice 0)
    // O endereço virtual de dados[0] é traduzido pelo sistema (MMU)
    // para um endereço físico na RAM
    std::cout << dados[0] << std::endl; // Imprime 42 na tela

    return 0;
}

Mesmo alocando um milhão de inteiros, o sistema pode não mapear toda a memória física imediatamente. As páginas são carregadas sob demanda, conforme o acesso ocorre.

Observação importante: O endereço de dados[0] é virtual, não físico. Dois processos podem ter o mesmo endereço virtual apontando para locais físicos completamente diferentes.

Anotações

  • Memória física: RAM real, limitada e compartilhada pelo hardware.
  • Memória virtual: Abstração do SO para isolamento e multitarefa. Endereços virtuais são traduzidos para físicos pela MMU.
  • Page fault: Interrupção que ocorre quando uma página virtual não está mapeada na RAM física, forçando o carregamento do disco.
  • TLB (Translation Lookaside Buffer): Cache de traduções recentes de endereços virtuais para físicos, acelerando acessos.
  • Hierarquia de memória: Registradores → Cache L1/L2/L3 → RAM → Disco (swap). Acessos mais rápidos nos níveis superiores.

Tutoriais e Estudos

  • Memory Management in Linux
  • Understanding the Linux Virtual Memory Manager
  • TLB, Paging, and Cache Visualization

Cheat Sheets

  • Linux Memory Management Cheatsheet
  • C++ Memory Cheatsheet
Ver todos os artigos