Um aplicativo recebe um intervalo de memória pelo sistema operacional. Geralmente, o aplicativo precisa solicitar a memória, mas essa funcionalidade pode ser obscurecida para o programador por causa da linguagem.
Idiomas como C permitem solicitações de bloco para tamanhos específicos, enquanto outros idiomas como C ++, C # e Java permitem solicitações através do uso de palavras-chave como new
. Cada idioma possui várias maneiras de alocar memória, portanto, essa é apenas uma breve visão geral. A liberação da memória de volta para o sistema operacional pode ser feita explicitamente ou através de um coletor de lixo.
O acesso à memória no aplicativo depende de como ele foi alocado. C e C ++ são os mais conhecidos por usar o conceito de ponteiros para indicar / rastrear onde a memória está localizada. Caso contrário, o acesso à memória é tratado através da classe ou variável que foi criada.
Na maioria das vezes, você não precisa se preocupar com acesso específico à memória dentro do seu programa. As construções de linguagem e o SO efetivamente ocultam essa preocupação para você.
Seu exemplo de cronômetro em um jogo é um ótimo exemplo de onde você não precisa se preocupar com a alocação de memória subjacente. Você terá uma variável que representa o cronômetro e apenas lerá a partir da variável.
Minha resposta é relevante para quando você está escrevendo o aplicativo, enquanto a resposta do zxcdw é relevante para acessar a memória que pertence a outro aplicativo. Seus termos LMGTFY seriam "depuração" e "engenharia reversa" para aprofundar esse tópico.
Algumas leituras adicionais:
- O artigo da Wikipedia sobre Memória do computador fornecerá uma visão geral decente das coisas.
- Em seguida, consulte o artigo da Wikipedia sobre E / S mapeada na memória para obter uma compreensão mais profunda das maquinações que continuam.
- Por fim, consulte o artigo sobre Memória virtual para obter uma resposta melhor sobre como cada sistema operacional lidará com o mapeamento de memória um pouco diferente dos outros.