E seu proferssor de linguagem de Programação (Linguagem C), não fazia a mínima idéia de como o Sistema Operacional implementa a alocação Dinâmica, ai vai um exemplo de alocação dinâmica do Sistema operacional Unix versão 6:
2500: # |
---|
Observe que a alocação não passa de uma simples manipulação de estrutura de dados, onde vai se incrementando o endereço de memória, até se achar uma região de memório com o tamanho que se deseja (size), disponível ...
O cara que colocou isso na net é um japonês, se desejar de uma conferidinha no arquivo do malloc em: www.tom-yam.or.jp
Se dejar ver os outros arquivos .c que ele colocou lá veja a página:
http://www.tom-yam.or.jp/2238/src/
Se Desejar ver onde ele linkou isso veja: http://www.tom-yam.or.jp/2238/"
Agora você finalmente pode dizer a seu professor de linguagem de programação como é que se implementa um malloc da vida ...!
Oserve que é algo relativamente simples ...!
Bom, abração a todos e se cuidem!
Acabei percebendo que uma galerinha ficou boiando na declaração dessa função malloc, devido a não conhecer os estilo clássico de declaração de funções, lembrando que esse código acima é da década de 70, logo é velho para burro!
Esse texto abaixo foi extraído integralmente sem alterações de:
http://br.geocities.com/sdiasneto/c_int/funcoes.htm
8.4 Parâmetros
Existem duas formas de declaração de parâmetros em funções: a forma clássica e a forma moderna.
A forma clássica tem a seguinte sintaxe:
TIPO NOME(PARÂMETRO1, PARÂMETRO2, ... , PARÂMETROn) TIPO DO PARÂMETRO1; TIPO DO PARÂMETRO2; ... ... TIPO DO PARÂMETROn; { CORPO DA FUNÇÃO } |
Já a forma moderna tem a seguinte sintaxe:
TIPO NOME(TIPO PARÂMETRO1, TIPO PARÂMETRO2, ... , TIPO PARÂMETROn) { CORPO DA FUNÇÃO } |
Abaixo segue um exemplo de função com os dois tipos de declaração de parâmetros.
/* Com declaração clássica */ int soma(a, b) int a; int b; { int resultado; resultado = a + b; return(resultado); } /* Com declaração moderna */ int soma(int a, int b) { int resultado; resultado = a + b; return(resultado); } |
Atualmente utiliza-se a forma moderna, porém, em programas mais antigos você encontrará a forma clássica.
Fim do comentário dextraído da página mencionada.
Repare que na declaração clássica, dentro dos parêntesis "(" e ")", vão apenas os nomes dos parâmetos ("variáveis"), os respectivos tipos dela são declarados logo após o fecha parêntesis")" e antes do símbolo, abre chaves "{", o símbolo que indica onde começa a função.
Na função malloc acima mp é u ponteiro que aponta para uma estrutura do tipo map (a estrutura do tipo map possui, dois ponteiras para char )
Size deve ser definido em uma diretiva de compilação, aqueles # no cabeçalho do arquivo, mas infelizmente ele não está nessa parte do código para saber ...
Então .., observe que no laço for, você anda alguns endereços de memória até achar uma área de memória livre com um tamanho maior ou igual ao que necessita, nesse caso o tamanho é bp->m_size, e o tamanho que vc necessita é size.
Se você achar você vai indicar ao Sistema operacional que aquela região de memória será ocupada através da operação: bp->m_addr =+ size;
ai você retorna um valor inteiro, que supostamente seria a região de memória alocada ...!
Esse algoritmo acima é o First-fit, ou seja o primeiro que encontrar, podem existir implementações com algoritmos best-fit, worst-fit, FCFS ..., mas esses algoritmos ai o professor Rafael Obelheiro ensina bem lá na Disciplina de Sistemas Operacionais na UDESC, se voc acha que não ensina pelo menos ele cobra bem ..., você tem que saber ...!
Quando fizer a disciplina de SOP com ele entenderá melhor isso ai acima ...!
Nenhum comentário:
Postar um comentário