O hardware e instruções para gerenciamento de memória em processadores Intel Core pode ser visto no capítulo 3 do manual do processador:
http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html
A forma como a memória física é usada por Windows e por Linux pode ser vista em:
http://blog.codinghorror.com/dude-wheres-my-4-gigabytes-of-ram/
http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map/
(não encontrei referências no site da Microsoft ou do Linux... a maioria das referências que visitei concordam com as apresentadas)
Agora aumenta a importância do post para nós:
O sistema operacional gerencia a memória física (inclui RAM, HD, swap,...) e quando carrega o executável em memória para que seja executado, expõe aos programas um mapeamento da memória física (que é o espaço de endereçamento virtual):
http://stackoverflow.com/questions/2048007/linux-ia-32-memory-model
http://www.linuxjournal.com/article/4681
http://www.linuxjournal.com/article/6701?page=0,0
http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/
Em especial o exemplo relativo a figura abaixo é bastante ilustrativo do que explico sobre onde (no espaço de endereçamento virtual) ficam armazenados o programa, os literais e as variáveis (estáticas, tipos primitivos e objetos (tipos abstratos)) em aula.
http://static.duartes.org/img/blogPosts/mappingBinaryImage.png
Agora é totalmente nosso território!!!:
Em especial, quando criamos arrays com new e com referência atribuída a uma variável estática, a variável fica no "segmento" de dados e os elementos do array fica no heap.
No escopo de ACH2001 o interesse maior é com a alocação de variáveis (objetos) em memória, geralmente sem preocupação sobre sua localização exata ("segmento" de código, de dados, pilha (stack), heap,...). É suficiente considerar a memória um espaço de armazenamento com endereços.
Relembrando (o pouco que) sabemos sobre compiladores, os identificadores são necessários para facilitar o trabalho do programador. Compiladores substituem identificadores por (algum tipo de) endereço de memória, é suficiente para o programa operar corretamente. Assim, em representações de memória, o identificador é colocado como um rótulo dado a uma posição de memória.
Este é o blog de relacionamento com alunos de Fábio Nakano.
Desejo testar se esta mídia facilita a comunicação e aprendizado de conteúdo.
Gostaria que vocès dessem notas mais altas para posts que ajudaram mais a entender o assunto (e não por outro critério, por exemplo o melhor escrito ou o mais "bonito")
fabionakano at usp dot br
Prédio A1, segundo andar - Sala 204E
Caso precise do mapa do Campus:http://each.uspnet.usp.br/site/mapa.php
Siga-me por email preenchendo a caixa abaixo.
Nenhum comentário:
Postar um comentário