int main(int argc, char *argv[]) { if (argc < 4) { std::cout << "Usage: basiclife <rows> <cols> <numstart> <generations> <prefix>" << std::endl; return 0; } int rows = atoi(argv[1]); int cols = atoi(argv[2]); int numStart = atoi(argv[3]); int numGenerations = atoi(argv[4]); std::string prefix(argv[5]); std::vector< std::vector<bool> > arena; initializeArena(arena, rows, cols, numStart); int generationCount = 0; while (generationCount < numGenerations) { writeGenerationToFile(arena, prefix, generationCount); computeNextGeneration(arena); generationCount++; } }
void *nextFitAllocRegion(size_t s) { size_t asize = align8(s); BlockPrefix_t *p; if (arenaBegin == 0) /* arena uninitialized? */ initializeArena(); p = findNextFit(s); /* find a block */ if (p) { /* found a block */ size_t availSize = computeUsableSpace(p); if (availSize >= (asize + prefixSize + suffixSize + 8)) { /* split block? */ void *freeSliverStart = (void *)p + prefixSize + suffixSize + asize; void *freeSliverEnd = computeNextPrefixAddr(p); makeFreeBlock(freeSliverStart, freeSliverEnd - freeSliverStart); makeFreeBlock(p, freeSliverStart - (void *)p); /* piece being allocated */ } p->allocated = 1; /* mark as allocated */ return prefixToRegion(p); /* convert to *region */ } else { /* failed */ return (void *)0; } }