Ejemplo n.º 1
0
Archivo: mm.c Proyecto: Sanuye/TI3-C
//my_free versucht den Speicherbereich, auf den <p> verweist, wieder freizugeben.
//Sofern <p> in unserem Speicher gefunden wird, muessen benachbarte, freie Speicherbloecke
//miteinander verschmolzen werden.
void my_free(void* p)
{
	if(!b_initialized)
	{
		return;
	}
	//TODO - WIP - needs testing - works
	//DEBUG
	//printf("mfree: look for pointer..\n");
	// SUCHE NACH DEM BLOCK MIT ZEIGER <p>
	memoryBlock *block = head;
	while (block != NULL){
		if(block->data == p){
			break;
		}else{
			block = block->nextBlock;
		}
	}
	// FALLS KEINER GEFUNDEN WURDE, GEBE EINE MELDUNG AUS.
	if(block == NULL){
		printf("free: error: Given pointer is no memory block\n");
		return;
	}
	//FREIGEBEN VON DEM ENTSPRECHENDEN SPEICHERBLOCK
	block->state = not_allocated;
	//FREIE SPEICHERBLOECKE MITEINANDER VERSCHMELZEN
	mergeFreeBlocks();
}
Ejemplo n.º 2
0
//my_free versucht den Speicherbereich, auf den <p> verweist, wieder freizugeben.
//Sofern <p> in unserem Speicher gefunden wird, muessen benachbarte, freie Speicherbloecke
//miteinander verschmolzen werden.
void my_free(void* p)
{
    if(!b_initialized)
    {
        return;
    }
    //TODO - DONE
    //FREIGEBEN VON DEM ENTSPRECHENDEN SPEICHERBLOCK
    memoryBlock* block;
    block = p - memoryBlockHeaderSize;
    block->state = not_allocated;

    //FREIE SPEICHERBLOECKE MITEINANDER VERSCHMELZEN
    mergeFreeBlocks();
}
Ejemplo n.º 3
0
//my_free versucht den Speicherbereich, auf den <p> verweist, wieder freizugeben.
//Sofern <p> in unserem Speicher gefunden wird, muessen benachbarte, freie Speicherbloecke
//miteinander verschmolzen werden.
void my_free(void* p)
{

    if(!b_initialized)
        return;
    // SUCHE NACH DEM BLOCK MIT ZEIGER <p>
    memoryBlock* block = head;
    while(block != NULL && block->data != p)
        block = block->nextBlock;
    // FALLS KEINER GEFUNDEN WURDE, GEBE EINE MELDUNG AUS.
    if(block == NULL)
    {
        printf("Not a valid pointer\n");
        return;
    }
    //FREIGEBEN VON DEM ENTSPRECHENDEN SPEICHERBLOCK
    block->state = not_allocated;
    //FREIE SPEICHERBLOECKE MITEINANDER VERSCHMELZEN
    mergeFreeBlocks();
}
Ejemplo n.º 4
0
// my_free versucht den Speicherbereich, auf den <p> verweist, wieder freizugeben.
// Sofern <p> in unserem Speicher gefunden wird, muessen benachbarte, freie Speicherbloecke
// miteinander verschmolzen werden.
void my_free(void* p)
{
	if(!b_initialized)
	{
		return;
	}

	// TODO
	// SUCHE NACH DEM BLOCK MIT ZEIGER <p>
	if(!p) return;

	memoryBlock *last = 0;
	memoryBlock *block = head;
	// TODO
	// SUCHE NACH EINEM GEEIGNETEN FREIEN SPEICHERBLOCK, MIT MEHR ALS <byteCount>
	// VIELEN BYTES
	//

	do
	{
		if(block->data == p) break;
		last = block;
		block = block->nextMemBlock;
	}
	while(block != 0);

	if(block == 0) return;

	// FALLS KEINER GEFUNDEN WURDE, GEBE EINE MELDUNG AUS.

	// FREIGEBEN VON DEM ENTSPRECHENDEN SPEICHERBLOCK

	block->state = not_allocated;

	// FREIE SPEICHERBLOECKE MITEINANDER VERSCHMELZEN
	mergeFreeBlocks();
}