1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

malloc sbrk

Discussão em 'Programação' iniciada por askno, 1 de Julho de 2008. (Respostas: 1; Visualizações: 812)

  1. askno

    askno Power Member

    Boas tava aqui a fazer uma função tipo malloc e free e surgiu-me a seguinte duvida descrita em baixo se alguem puder ajudar agradecia abraços

    Código:
    struct bloco {
      int is_available;
      int size;
    }
     
    void free (void *firstbyte) {
       struct bloco *b;
       b = firstbyte - sizeof (struct b);
       b -> is_available = 1;
    }
     
    long *array1 = (long*)mymalloc (sizeof (long) * 10); // 0x100 ate 0x110
    int *array2 = (int*) mymalloc (sizeof (int) * 5);
    long *array3 = (long*) mymalloc (sizeof (long) * 10);
    Ao fazer
    myfree (array2);
    vou ficar com um um bloco de 20bytes livres, que poderá ser utilizado caso chame a função
    mymalloc (int bytes) em que bytes <= 20

    imaginemos que chamamos int * array4 = (int*) mymalloc (sizeof (int) * 5);

    portanto array4 fica com o endereço de memória do antigo array2 mas apenas aproveita 50% do bloco.
    (talvez possa melhorar isto apagando o bloco original e criando 2 novos um com o tamanho necessario para o array4 e o outro com o que sobrou do size do bloco original)

    Ainda assim existe a possibilidade de ficarem bastantes blocos livres pelo meio no caso em que as chamadas mymalloc (int bytes) em que bytes é sempre maior que bloco.size e nesse caso pede-se ao sistema operativo pela sbrk(), mais memoria.
    Portanto o que posso fazer para eliminar esses blocos perdidos pelo meio?
    Obrigado cumprimentos.
     
    Última edição pelo moderador: 1 de Julho de 2008
  2. countzero

    countzero Power Member

    Olá.

    Dá uma vista de olhos em:

    Espero que os links te sejam úteis.

    Cumps,
    JP
     

Partilhar esta Página