static void local_finalMessage(void) { #ifdef ENABLE_XMEM_TRACK_MEM printf("\n"); xmem_info(stdout); printf("\n"); #endif ; }
static void local_finalMessage(void) { #ifdef ENABLE_XMEM_TRACK_MEM printf("\n"); xmem_info(stdout); printf("\n"); #endif printf("\nAll done.\nThank you for using `%s'!\n" "Vertu sæl/sæll...\n", localProgramName); }
extern void * xrealloc(void *ptr, size_t size) { void *dummy; #ifdef XMEM_TRACK_MEM uint64_t old_size; #endif if (ptr == NULL) { dummy = xmalloc(size); return dummy; } #ifdef XMEM_TRACK_MEM dummy = realloc(((uint64_t *)ptr) - 1, size + 8); #else dummy = realloc(ptr, size); #endif if (dummy == NULL) { fprintf(stderr, "Could not re-allocate "); if (size < 1024) { fprintf(stderr, "%i b\n", (int)size); } else if (size < 1048576) { fprintf(stderr, "%f Kib\n", size / 1024.); } else if (size < 1073741824) { fprintf(stderr, "%f Mib\n", size / 1048576.); } else { fprintf(stderr, "%.2f Gib\n", size / 1073741824.); } #ifdef XMEM_TRACK_MEM xmem_info(stderr); #endif fprintf(stderr, "Aborting... :-(\n"); abort(); } #ifdef XMEM_TRACK_MEM old_size = *((uint64_t *)dummy); global_allocated_bytes -= old_size; global_allocated_bytes += size; if (global_allocated_bytes > global_max_allocated_bytes) { global_max_allocated_bytes = global_allocated_bytes; } *((uint64_t *)dummy) = (uint64_t)size; dummy = (void *)(((uint64_t *)dummy) + 1); #endif return dummy; } /* xrealloc */
extern void xfree(void *ptr) { #ifdef XMEM_TRACK_MEM if (ptr == NULL) return; if (global_malloc_vs_free <= 0) { fprintf(stderr, "Calling free too often.\n"); xmem_info(stderr); abort(); } global_allocated_bytes -= *(((uint64_t *)ptr) - 1); global_malloc_vs_free--; free(((uint64_t *)ptr) - 1); #else free(ptr); #endif return; }
static void local_finalMessage(void) { int rank = 0; #ifdef WITH_MPI MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Finalize(); #endif if (localSectionName != NULL) xfree(localSectionName); if (localIniFileName != NULL) xfree(localIniFileName); if (rank == 0) { #ifdef XMEM_TRACK_MEM printf("\n"); xmem_info(stdout); printf("\n"); #endif printf("\nVertu sæl/sæll...\n"); } }
/*--- Implementation of exported functions ------------------------------*/ extern void * xmalloc(size_t size) { void *dummy; #ifdef XMEM_TRACK_MEM dummy = malloc(size + 8); #else dummy = malloc(size); #endif if (dummy == NULL) { fprintf(stderr, "Could not allocate "); if (size < 1024) { fprintf(stderr, "%i b\n", (int)size); } else if (size < 1048576) { fprintf(stderr, "%.2f Kib\n", size / 1024.); } else if (size < 1073741824) { fprintf(stderr, "%.2f Mib\n", size / 1048576.); } else { fprintf(stderr, "%.2f Gib\n", size / 1073741824.); } #ifdef XMEM_TRACK_MEM xmem_info(stderr); #endif fprintf(stderr, "Aborting... :-(\n"); abort(); } #ifdef XMEM_TRACK_MEM global_allocated_bytes += size; global_malloc_vs_free++; if (global_allocated_bytes > global_max_allocated_bytes) { global_max_allocated_bytes = global_allocated_bytes; } *((uint64_t *)dummy) = (uint64_t)size; dummy = (void *)(((uint64_t *)dummy) + 1); #endif return dummy; } /* xmalloc */
extern void * xmalloc(size_t size) { void *dummy; #ifdef XMEM_TRACK_MEM dummy = malloc(size + 8); #else dummy = malloc(size); #endif if (dummy == NULL) { fprintf(stderr, "Could not allocate "); if (size < 1024) { fprintf(stderr, "%ib\n", (int)size); } else if (size < 1048576) { fprintf(stderr, "%fkb\n", size / 1024.); } else { fprintf(stderr, "%fMb\n", size / 1048576.); } #ifdef XMEM_TRACK_MEM xmem_info(stderr); #endif fprintf(stderr, "Exiting... :-(\n"); exit(EXIT_FAILURE); } #ifdef XMEM_TRACK_MEM global_allocated_bytes += size; global_malloc_vs_free++; if (global_allocated_bytes > global_max_allocated_bytes) global_max_allocated_bytes = global_allocated_bytes; *((uint64_t *)dummy) = (uint64_t)size; dummy = (void *)(((uint64_t *)dummy) + 1); #endif return dummy; } /* xmalloc */