Exemple #1
0
int main()
{
	my_mem_init(memoire, TAILLE_MEMOIRE);
	printf("Test de l'etat initial de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 1);
	printf("TEST INIT OK\n\n");
	
	printf("\n--------------------------\n\n");
	
	printf("Test de free :\n");
	mem_fit(&mem_fit_best);
	my_mem_alloc(500);
	my_mem_alloc(400);
	my_mem_alloc(300);
	my_mem_alloc(200);
	//my_mem_free(0);
	my_mem_free(1);
	//my_mem_free(2);
	my_mem_free(3);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	printf("nb_free = %d ; nb_busy = %d\n", nb_free, nb_busy);
	assert(nb_free == 2 && nb_busy == 2);
	printf("TEST FREE OK\n\n");
	my_mem_init(memoire, TAILLE_MEMOIRE);
	
	printf("\n--------------------------\n\n");
	
	printf("Test de best fit :\n");
	my_mem_alloc(500);
	my_mem_alloc(400);
	my_mem_alloc(300);
	my_mem_alloc(200);
	my_mem_alloc(100);
	my_mem_alloc(200);
	my_mem_alloc(300);
	my_mem_alloc(400);
	my_mem_alloc(500);
	printf("Etat de la memoire :\n");
	my_mem_free(0);
	my_mem_free(2);
	my_mem_free(4);
	my_mem_free(7);
	my_mem_alloc(200);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	printf("nb_free = %d ; nb_busy = %d\n", nb_free, nb_busy);
	assert(nb_free == 5 && nb_busy == 6);
	printf("TEST BEST OK\n\n");
	my_mem_init(memoire, TAILLE_MEMOIRE);
	
	printf("\n--------------------------\n\n");

	printf("Test de worst fit :\n");
	mem_fit(&mem_fit_worst);
	my_mem_alloc(500);
	my_mem_alloc(400);
	my_mem_alloc(300);
	my_mem_alloc(200);
	my_mem_alloc(100);
	my_mem_alloc(200);
	my_mem_alloc(300);
	my_mem_alloc(400);
	my_mem_alloc(500);
	my_mem_alloc(1096);
	my_mem_free(0);//Libere 500
	my_mem_free(2);//Libere 300
	my_mem_free(4);//Libere 100
	my_mem_alloc(200);
	
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	printf("nb_free = %d ; nb_busy = %d\n", nb_free, nb_busy);
	assert(nb_free == 3 && nb_busy == 8);
	printf("TEST WORST OK\n\n");

	printf("\n--------------------------\n\n");

	printf("1.Best Fit est meilleur que First Fit :\n");
	printf(" 1.1 Test avec Best fit :\n");
	my_mem_init(memoire, TAILLE_MEMOIRE);
	mem_fit(&mem_fit_best);
	my_mem_alloc(200);
	my_mem_alloc(300);
	my_mem_alloc(100);
	my_mem_alloc(3456);
	my_mem_free(0);//Libere 200
	my_mem_free(2);//Libere 100
	my_mem_alloc(90);
	my_mem_alloc(190);
	my_mem_show(afficher_zone);

	printf("\n 1.2 Test avec First fit :\n");
	my_mem_init(memoire, TAILLE_MEMOIRE);
	my_mem_alloc(200);
	my_mem_alloc(300);
	my_mem_alloc(100);
	my_mem_alloc(3456);
	my_mem_free(0);//Libere 200
	my_mem_free(2);//Libere 100
	my_mem_alloc(90);
	my_mem_alloc(190);//Allocaionimpossible avec first fit
	my_mem_show(afficher_zone);

	printf("\n2.First Fit est meilleur que Best Fit :\n");
	printf(" 2.1 Test avec First fit :\n");
	my_mem_init(memoire, TAILLE_MEMOIRE);
	my_mem_alloc(200);
	my_mem_alloc(300);
	my_mem_alloc(100);
	my_mem_alloc(3456);
	my_mem_free(0);//Libere 200
	my_mem_free(2);//Libere 100
	my_mem_alloc(72);
	my_mem_alloc(112);
	my_mem_alloc(92);
	my_mem_show(afficher_zone);
	printf(" 2.2 Test avec Best fit :\n");
	my_mem_init(memoire, TAILLE_MEMOIRE);
	mem_fit(&mem_fit_best);
	my_mem_alloc(200);
	my_mem_alloc(300);
	my_mem_alloc(100);
	my_mem_alloc(3456);
	my_mem_free(0);//Libere 200
	my_mem_free(2);//Libere 100
	my_mem_alloc(72);
	my_mem_alloc(112);//Allocation impossible avec best_fit
	my_mem_alloc(92);
	my_mem_show(afficher_zone);
}
Exemple #2
0
int main() {
	int struct_fb_size, struct_bb_size;
	int i, j, nb_alloc = 0, size, addr;
	char *result;

	my_mem_init(TAILLE_MEMOIRE);
	printf("Test de l'etat initial de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 1);
	printf("TEST OK\n\n");

	printf("Test de base, serie d'allocations :\n");
	my_mem_alloc(8);
	my_mem_alloc(16);
	my_mem_alloc(4);
	my_mem_alloc(12);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 1 && nb_busy == 4);
	printf("TEST OK\n\n");

	printf("Test de mem_reinit :\n");
	my_mem_init(-1);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 1);
	printf("TEST OK\n\n");

	printf("Test d'allocation puis liberation :\n");
	struct_bb_size = free_size[0];
	my_mem_alloc(16);
	my_mem_show(decompte_zone);
	struct_bb_size -= free_size[0] + 16;
	my_mem_alloc(4);
	my_mem_alloc(30);
	my_mem_alloc(1);
	my_mem_alloc(64);
	my_mem_alloc(24);
	my_mem_alloc(23);
	my_mem_free(2);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 2 && nb_busy == 6);
	printf("TEST OK\n\n");

	printf("Verification de la taille des allocations (multiples de 4)\n");
	for (i = 0; i < nb_busy; i++)
		assert((busy_size[i] & 3) == 0);
	printf("TEST OK\n\n");

	printf("Test de fusion amont :\n");
	my_mem_free(1);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	struct_fb_size = free_size[0] - 36;
	assert(nb_free == 2 && nb_busy == 5);
	printf("TEST OK\n\n");

	printf("Test de fusion aval :\n");
	my_mem_free(3);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 2 && nb_busy == 4);
	printf("TEST OK\n\n");

	printf("Test de fusion amont+aval :\n");
	my_mem_free(5);
	my_mem_show(decompte_zone);
	assert(nb_free == 3 && nb_busy == 3);
	my_mem_free(4);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 2 && nb_busy == 2);
	printf("TEST OK\n\n");

	addr = (int) struct_fb_size;
	printf("Apparemment la taille de votre entete de bloc libre est de %d "
			"octets\n", &addr);
	addr = (int) struct_bb_size;
	printf("Apparemment la taille de votre entete de bloc occupe est de %d "
			"octets\n", &addr);
	printf("\n");

	printf("Test d'allocation/liberation de tout l'espace :\n");
	my_mem_init(-1);
	my_mem_alloc(TAILLE_MEMOIRE - struct_bb_size);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 0 && nb_busy == 1);
	my_mem_free(0);
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 1 && nb_busy == 0);
	printf("TEST OK\n\n");

	printf("Test d'allocation/libération avec utilisation de la mémoire :\n");
	my_mem_init(-1);
	my_mem_alloc(16);
	my_mem_alloc(4);
	my_mem_alloc(30);
	my_mem_alloc(1);
	my_mem_alloc(64);
	my_mem_alloc(24);
	my_mem_alloc(23);
	for (i = 0; i < position; i++)
		for (j = 0; j < sizes[i]; j++)
			((char *) allocs[i])[j] = (char) Random();
	my_mem_free(1);
	my_mem_free(3);
	my_mem_free(5);
	my_mem_alloc(4);
	for (i = 0; i < position; i++)
		if ((i > 5) || (i & 1) == 0)
			for (j = 0; j < sizes[i]; j++)
				((char *) allocs[i])[j] = (char) Random();
	printf("Etat de la memoire :\n");
	my_mem_show(afficher_zone);
	assert(nb_free == 3 && nb_busy == 5);
	printf("TEST OK\n\n");

	printf("Test final, serie aléatoire d'allocations/libérations aléatoires "
			"avec utilisation de la mémoire :\n");
	my_mem_init(-1);
	for (i = 0; i < 1000; i++) {
		if (nb_alloc && (Random() & 1)) {
			for (j = 0; !allocs[j]; j++) {
			}
			my_mem_free(j);
			allocs[j] = NULL;
			nb_alloc--;
		} else {
			size = Random() & 511;
			result = my_mem_alloc(size);
			if (result) {
				for (j = 0; j < size; j++)
					result[j] = (char) Random();
				nb_alloc++;
			}
		}
	}
	printf("TEST OK\n\n");

	return 0;
}
Exemple #3
0
int main()
{
  size_t struct_fb_size, struct_bb_size;
  int i, j, nb_alloc = 0, size;
  char *result;
  struct timeval tv;

  my_mem_init(memoire, TAILLE_MEMOIRE);
  printf("Test de l'etat initial de la memoire :\n");
  my_mem_show(afficher_zone);
  assert(nb_free == 1);
  printf("TEST OK\n\n");

  printf("Test de base, serie d'allocations :\n");
  my_mem_alloc(8);
  my_mem_alloc(16);
  my_mem_alloc(4);
  my_mem_alloc(12);
  printf("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  assert(nb_free == 1 && nb_busy == 4);
  printf("TEST OK\n\n");

  printf("Test de mem_init :\n");
  my_mem_init(memoire, TAILLE_MEMOIRE);
  printf("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  assert(nb_free == 1 && nb_busy == 0);
  printf("TEST OK\n\n");

  printf("Test d'allocation puis liberation :\n");
  my_mem_alloc(4);
  my_mem_alloc(4);
  my_mem_alloc(30);
  my_mem_alloc(1);
  my_mem_alloc(64);
  my_mem_alloc(24);
  my_mem_alloc(23);
  my_mem_free(2);
  printf("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  assert(nb_free == 2 && nb_busy == 6);
  printf("TEST OK\n\n");

  printf("Verification de la taille des allocations (multiples de %zd)\n",
	 sizeof(void*));
  for (i=0; i<nb_busy; i++)
      assert((busy_size[i] & (sizeof(void*)-1)) == 0);
  printf("TEST OK\n\n");
  {
    int i=1;
    intptr_t tmp = ~mem_align;
    while (tmp & 1) {
      tmp >>= 1;
      i <<= 1;
    }
    printf("L'alignement semble être systématique sur %i octets\n", i);
  }

  printf("Test de fusion amont :\n");
  my_mem_free(1);
  printf("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  struct_fb_size = free_size[0] - 36;
  assert(nb_free == 2 && nb_busy == 5);
  printf("TEST OK\n\n");

  printf("Test de fusion aval :\n");
  my_mem_free(3);
  printf("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  assert(nb_free == 2 && nb_busy == 4);
  printf("TEST OK\n\n");

  printf("Test de fusion amont+aval :\n");
  my_mem_free(5);
  my_mem_show(decompte_zone);
  assert(nb_free == 3 && nb_busy == 3);
  my_mem_free(4);
  printf("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  assert(nb_free == 2 && nb_busy == 2);
  printf("TEST OK\n\n");

  printf("Récupération de la taille d'entête de bloc occupé:\n");
  my_mem_init(memoire, TAILLE_MEMOIRE);
  my_mem_show(decompte_zone);
  struct_bb_size = free_size[0];
  my_mem_alloc(__BIGGEST_ALIGNMENT__);
  my_mem_show(decompte_zone);
  struct_bb_size -= free_size[0] + __BIGGEST_ALIGNMENT__;
  printf("Apparemment la taille de votre entete de bloc occupe est de %lu "
         "octets\n", (unsigned long) struct_bb_size);
  printf("\n");
  
  printf("Test d'allocation/liberation de tout l'espace :\n");
  my_mem_init(memoire, TAILLE_MEMOIRE);
  my_mem_alloc(TAILLE_MEMOIRE - struct_bb_size);
  printf("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  assert(nb_free == 0 && nb_busy == 1);
  my_mem_free(0);
  printf("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  assert(nb_free == 1 && nb_busy == 0);
  printf("TEST OK\n\n");

  printf("Récupération de la taille d'entête de bloc libre:\n");
  my_mem_init(memoire, TAILLE_MEMOIRE);
  my_mem_alloc(4*__BIGGEST_ALIGNMENT__);
  my_mem_alloc(TAILLE_MEMOIRE - 2*struct_bb_size - 4*__BIGGEST_ALIGNMENT__);
  my_mem_show(afficher_zone);
  assert(nb_free == 0 && nb_busy == 2);
  my_mem_free(0);
  my_mem_show(decompte_zone);
  assert(nb_free == 1 && nb_busy == 1);
  for (i=1; i<4*__BIGGEST_ALIGNMENT__; i++) {
    my_mem_alloc(4*__BIGGEST_ALIGNMENT__ - i);
    my_mem_show(decompte_zone);
    assert((nb_free == 1 || nb_free == 0) && nb_busy == 2);
    if (nb_free == 1) {
	break;
    }
    my_mem_free(i+1);
  }
  struct_fb_size=i;
  printf("Apparemment la taille de votre entete de bloc libre est de %lu "
         "octets\n", (unsigned long) struct_fb_size);
  printf("\n");

  printf("Test d'allocation/libération avec utilisation de la mémoire :\n");
  gettimeofday(&tv, NULL);
  srand(tv.tv_usec);
  my_mem_init(memoire, TAILLE_MEMOIRE);
  my_mem_alloc(16);
  my_mem_alloc(4);
  my_mem_alloc(30);
  my_mem_alloc(1);
  my_mem_alloc(64);
  my_mem_alloc(24);
  my_mem_alloc(23);
  for (i=0; i<position; i++)
      for (j=0; j<sizes[i]; j++)
          ((char *) allocs[i])[j] = (char) rand();
  my_mem_free(1);
  my_mem_free(3);
  my_mem_free(5);
  my_mem_alloc(4);
  for (i=0; i<position; i++)
      if ((i > 5) || (i & 1) == 0)
          for (j=0; j<sizes[i]; j++)
              ((char *) allocs[i])[j] = (char) rand();
  printf("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  /* Dans le cas de la politique worst_fit, nb_free est à 4
   * il est à 3 dans les autres cas
   */
  assert( (nb_free == 3 || nb_free == 4) && nb_busy == 5);
  printf("TEST OK\n\n");
  
  printf("Test final, serie aléatoire d'allocations/libérations aléatoires "
         "avec utilisation de la mémoire :\n");
  my_mem_init(memoire, TAILLE_MEMOIRE);
  for (i=0; i<1000; i++) {
      if (nb_alloc && (rand() & 1)) {
          for (j=0; !allocs[j]; j++) {
          }
          my_mem_free(j);
          allocs[j] = NULL;
          nb_alloc--;
      } else {
          size = rand() & 511;
          result = my_mem_alloc(size);
          if (result) {
              for (j=0; j<size; j++)
                  result[j] = (char) rand();
              nb_alloc++;
          }
      }
  }
  printf("TEST OK\n\n");
  
  return 0;
}
Exemple #4
0
int main()
{
  size_t struct_fb_size, struct_bb_size;
  int i;

  my_mem_init(TAILLE_MEMOIRE);
  my_mem_show(afficher_zone);
  if(nb_free != 1)
  {
	  PutString("assert failed ! 78\n");
	  Exit(0);
  }
  PutString("TEST OK\n\n");

  my_mem_alloc(8);
  my_mem_alloc(16);
  my_mem_alloc(4);
  my_mem_alloc(12);
  PutString("Etat de la memoire :\n");
  my_mem_show(afficher_zone);
  if(nb_free != 1 || nb_busy != 4)
  {
	  PutString("assert failed ! 92\n");
	  Exit(0);
  }

  my_mem_init(TAILLE_MEMOIRE);
  my_mem_show(afficher_zone);
  if(nb_free != 1 || nb_busy != 0)
  {
	  PutString("assert failed ! l89\n");
	  Exit(0);
  }
  PutString("TEST OK\n\n");

  my_mem_alloc(4);
  my_mem_alloc(4);
  my_mem_alloc(30);
  my_mem_alloc(1);
  my_mem_alloc(64);
  my_mem_alloc(24);
  my_mem_alloc(23);
  my_mem_free(2);
  my_mem_show(afficher_zone);
  if(nb_free != 2 || nb_busy != 6)
  {
	  PutString("assert failed ! l108\n");
	  Exit(0);
  }
  PutString("TEST OK\n\n");
  {
    int al=1;
    unsigned int tmp = ~mem_align;
    while (tmp & 1) {
      tmp >>= 1;
      al <<= 1;
    }
  }

  my_mem_free(1);
  my_mem_show(afficher_zone);
  struct_fb_size = free_size[0] - 36;
  if(nb_free != 2 || nb_busy != 5)
  {
	  PutString("assert failed ! 134\n");
	  Exit(0);
  }
  PutString("TEST OK\n\n");

  my_mem_free(3);
  my_mem_show(afficher_zone);
  if(nb_free != 2 || nb_busy != 4)
  {
	  PutString("assert failed ! 144\n");
	  Exit(0);
  }
  PutString("TEST OK\n\n");

  my_mem_free(5);
  my_mem_show(decompte_zone);
  if(nb_free != 3 || nb_busy != 3)
  {
	  PutString("assert failed ! 153\n");
	  Exit(0);
  }
  my_mem_free(4);
  my_mem_show(afficher_zone);
  if(nb_free != 2 || nb_busy != 2)
  {
	  PutString("assert failed ! 160\n");
	  Exit(0);
  }
  PutString("TEST OK\n\n");

  my_mem_init(TAILLE_MEMOIRE);
  my_mem_show(decompte_zone);
  struct_bb_size = free_size[0];
  my_mem_alloc(__BIGGEST_ALIGNMENT__);
  my_mem_show(decompte_zone);
  struct_bb_size -= free_size[0] + __BIGGEST_ALIGNMENT__;
  my_mem_init(TAILLE_MEMOIRE);
  my_mem_alloc(TAILLE_MEMOIRE - struct_bb_size);
  my_mem_show(afficher_zone);
  if(nb_free != 0 || nb_busy != 1)
  {
	  PutString("assert failed ! 182\n");
	  Exit(0);
  }
  my_mem_free(0);
  my_mem_show(afficher_zone);
  if(nb_free != 1 || nb_busy != 0)
  {
	  PutString("assert failed ! 189\n");
	  Exit(0);
  }
  PutString("TEST OK\n\n");

  my_mem_init(TAILLE_MEMOIRE);
  my_mem_alloc(4*__BIGGEST_ALIGNMENT__);
  my_mem_alloc(TAILLE_MEMOIRE - 2*struct_bb_size - 4*__BIGGEST_ALIGNMENT__);
  my_mem_show(afficher_zone);
  if(nb_free != 0 || nb_busy != 2)
  {
	  PutString("assert failed ! 210\n");
	  Exit(0);
  }
  my_mem_free(0);
  my_mem_show(decompte_zone);
  if(nb_free != 1 || nb_busy != 1)
  {
	  PutString("assert failed ! 217\n");
	  Exit(0);
  }
  for (i=1; i<4*__BIGGEST_ALIGNMENT__; i++) {
    my_mem_alloc(4*__BIGGEST_ALIGNMENT__ - i);
    my_mem_show(decompte_zone);
    if((nb_free != 1 && nb_free != 0) || nb_busy != 2)
    {
    	PutString("assert failed ! 221\n");
    }
    if (nb_free == 1) {
	break;
    }
    my_mem_free(i+1);
  }
  
  return 0;
}