A simple memory testing utility
at main 62 lines 1.5 kB view raw
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <unistd.h> 5 6#define KB 1024 7#define MB 1024 * KB 8 9void print_usage_and_quit(char *progname) { 10 printf("%s: -m <memory in MB> [-s <sleep time in seconds>]\n", progname); 11 exit(EXIT_FAILURE); 12} 13 14int main (int argc, char** argv) { 15 int total_mem = 0; 16 int sleep_time = 0; 17 int i = 0; 18 char c = 0; 19 char **mem = NULL; 20 21 while ((c = getopt (argc, argv, "m:s:")) != -1) { 22 switch (c) { 23 case 'm': 24 total_mem = atoi(optarg); 25 break; 26 case 's': 27 sleep_time = atoi(optarg); 28 break; 29 default: 30 print_usage_and_quit(argv[0]); 31 break; 32 } 33 } 34 35 if (total_mem <= 0) { 36 print_usage_and_quit(argv[0]); 37 } 38 39 mem = (char**) calloc(total_mem, sizeof(char*)); 40 printf("Memory allocation test up to %d MB, sleeping %d seconds between allocations\n", total_mem, sleep_time); 41 for (i = 0; i < total_mem; i++) { 42 printf("Total allocation %d MB...", i); 43 mem[i] = (char *) calloc(MB, sizeof(char)); 44 if (mem[i] != NULL) { 45 memset(mem[i], 0xA, MB); 46 printf("success!\n"); 47 } else { 48 printf("fail.\n"); 49 break; 50 } 51 sleep(sleep_time); 52 } 53 printf("Successfully allocated %d MB\n", i); 54 for (i = 0; i < total_mem; i++) { 55 if (mem[i]) { 56 free(mem[i]); 57 } 58 } 59 free(mem); 60 exit(EXIT_SUCCESS); 61} 62