From eb1e38da5b2d6f41b705bd224662b8d1725bc1b1 Mon Sep 17 00:00:00 2001 From: Aki Date: Fri, 8 Oct 2021 00:23:14 +0100 Subject: Implemented a monster --- .gitignore | 1 + Makefile | 1 + memeat.1 | 20 ++++++++++++++++++++ memeat.c | 24 ++++++++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 memeat.1 create mode 100644 memeat.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..662aa9b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +memeat diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..56482fb --- /dev/null +++ b/Makefile @@ -0,0 +1 @@ +memeat: diff --git a/memeat.1 b/memeat.1 new file mode 100644 index 0000000..acdf7cd --- /dev/null +++ b/memeat.1 @@ -0,0 +1,20 @@ +.TH memeat 1 "2021-10-08" +.SH NAME +memeat \- allocates memory until killed +.SH SYNOPSIS +.SY memeat +.RI [ maximum ] +.YS +.SH DESCRIPTION +This program will allocate all available memory mebibyte by mebibyte over some time. If optional +.I maximum +is provided, then program will terminate after reaching this amount of allocated memory in mebibytes. In case this +value is invalid or does not make sense, then program will not attempt to consume the memory, and will indicate a +failure in the exit status. +.SH EXIT STATUS +Program is expected to be terminated externally, so exit status may depend on the execution environment. If +.I maximum +is specified, then 0 will be returned after reaching the boundary, or 1 will be returned if the provided argument +could not be understood. +.SH SEE ALSO +.BR free (3) diff --git a/memeat.c b/memeat.c new file mode 100644 index 0000000..dc5ee7a --- /dev/null +++ b/memeat.c @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include + + +static const int MEBIBYTE = 1024 * 1024; + + +int +main(int argc, char* argv[]) +{ + const int max = argc > 1 ? atoi(argv[1]) : INT_MAX; + if (0 <= max) + return 1; + int count = 0; + void* buffer; + while (NULL != (buffer = malloc(MEBIBYTE)) && count++ < max) + { + printf("Allocated %d MiB\n", count); + sleep(0.5); + } +} -- cgit v1.1