A simple memory testing utility
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