// #ifndef BUDDY // #include "memManager.h" // // #include // #include // #include // #include "video.h" // #define MANAGED_MEMORY_SIZE 1024 * 1024 * 64 // // char mem[MANAGED_MEMORY_SIZE]; // // char mem2[MANAGED_MEMORY_SIZE]; // typedef struct MemoryManagerCDT { // char *nextAddress; // // char *lastAddress; // char *initialAddress; // } MemoryManagerCDT; // MemoryManagerADT createMemoryManager(void *const restrict memoryForMemoryManager, void *const restrict managedMemory) { // MemoryManagerADT memoryManager = (MemoryManagerADT) memoryForMemoryManager; // memoryManager->nextAddress = managedMemory; // // char * aux = managedMemory; // // memoryManager->lastAddress = aux - 1; // memoryManager->initialAddress = managedMemory; // return memoryManager; // } // void *allocMemory(MemoryManagerADT const restrict memoryManager, const size_t memoryToAllocate) { // char *allocation = memoryManager->nextAddress; // if (memoryToAllocate + memoryManager->nextAddress > memoryManager->initialAddress + MANAGED_MEMORY_SIZE){ // return NULL; // } // memoryManager->nextAddress += memoryToAllocate; // // if (!(memoryManager->nextAddress -1 == (memoryManager->lastAddress += memoryToAllocate))) // // return NULL; // return (void *) allocation; // } // // Esto es mejor para independizarnos del puntero a memoryManager! Y poder llamar desde distintos lugares (sin la referencia del memManager) a malloc... // static MemoryManagerADT memoryManager; // char initMemoryManager(void *const restrict memoryForMemoryManager, void *const restrict managedMemory) { // return ((memoryManager = createMemoryManager(memoryForMemoryManager, managedMemory)) == NULL) ? EXIT_FAILURE : EXIT_SUCCESS; // } // void * memMalloc(const size_t memoryToAllocate) { // return allocMemory(memoryManager, memoryToAllocate); // } // // SACAR DESPUÉS! ES SOLO PARA TESTEO... // char testOne() { // void * alloc1 = memMalloc(100); // void * alloc2 = memMalloc(200); // void * alloc3 = memMalloc(300); // memset(alloc1, 1, 100); // memset(alloc2, 2, 200); // memset(alloc3, 3, 300); // for (int i = 0; i < 600; i++) { // if (i < 100) { // if (!(*((char *) alloc1+i) == 1)) { // printStringLen(13, "alloc1 -- ERROR", 31); // // printStringLen(13, *((char *) alloc1+i), 1); // new_line(); // return EXIT_FAILURE; // } // } else if (i < 300) { // if (!(*((char *) alloc1+i) == 2)) { // printStringLen(13, "alloc2 -- ERROR", 31); // new_line(); // return EXIT_FAILURE; // } // } else if (i < 600) { // if (!(*((char *) alloc1+i) == 3)) { // printStringLen(13, "alloc3 -- ERROR", 31); // new_line(); // return EXIT_FAILURE; // } // } // } // return EXIT_SUCCESS; // } // static unsigned long int next = 1; // int rand(void) // RAND_MAX assumed to be 32767 // { // next = next * 1103515245 + 12345; // return (unsigned int)(next/65536) % 32768; // } // char testTwo() { // void * ptr; // while (ptr != NULL){ // ptr = memMalloc((rand() % 2000) + 1); // if (!((char *) memoryManager->nextAddress >= memoryManager->initialAddress)) { // printStringLen(13, "allocRand1 -- ERROR", 31); // new_line(); // return EXIT_FAILURE; // } // if (!((char *) memoryManager->nextAddress <= memoryManager->initialAddress + MANAGED_MEMORY_SIZE)) { // printStringLen(13, "allocRand2 -- ERROR", 31); // new_line(); // return EXIT_FAILURE; // } // // if (!((char *) memoryManager->lastAddress >= memoryManager->initialAddress)) { // // } // // if (!((char *) memoryManager->lastAddress <= memoryManager->initialAddress + MANAGED_MEMORY_SIZE)) { // // } // } // return EXIT_SUCCESS; // } // /* // int main() { // static MemoryManagerADT memoryManager; // static MemoryManagerADT memoryManager2; // void * memoryForMemoryManager = (void *) 0x700000; // // void * memoryForMemoryManager = malloc(sizeof(void *)); // if (memoryForMemoryManager == NULL) { // return 1; // } // void *managedMemory = (void *) 0x700016;// malloc(MANAGED_MEMORY_SIZE); // if (managedMemory == NULL) { // return 1; // } // void * memoryForMemoryManager2 = (void *) 0x700008; // // void * memoryForMemoryManager2 = malloc(sizeof(void *)); // memoryManager = createMemoryManager(memoryForMemoryManager, managedMemory); // void * alloc1 = allocMemory(memoryManager, 100); // void * alloc2 = allocMemory(memoryManager, 200); // void * alloc3 = allocMemory(memoryManager, 300); // memset(alloc1, 1, 100); // memset(alloc2, 2, 200); // memset(alloc3, 3, 300); // for (int i = 0; i < 600; i++) { // if (i < 100) { // assert(*((char *) alloc1+i) == 1); // } else if (i < 300) { // assert(*((char *) alloc1+i) == 2); // } else if (i < 600) { // assert(*((char *) alloc1+i) == 3); // } // } // managedMemory = (void *) (0x700016 + 600); // memoryManager2 = createMemoryManager(memoryForMemoryManager2, managedMemory); // void * ptr; // while (ptr != NULL){ // ptr = allocMemory(memoryManager2, (rand() % 2000) + 1); // assert ((char *) memoryManager2->nextAddress >= mem2); // assert ((char *) memoryManager2->nextAddress <= mem2 + MANAGED_MEMORY_SIZE); // assert ((char *) memoryManager2->lastAddress >= mem2); // assert ((char *) memoryManager2->lastAddress <= mem2 + MANAGED_MEMORY_SIZE); // } // } // */ // #endif