aboutsummaryrefslogtreecommitdiff
path: root/tests/mem.c
blob: 208394964d610ec3deade7e2e83e0fc5c5751e29 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
 * Copyright (C) 2016, 2018, 2021 Tom Ryder <tom@sanctum.geek.nz>
 *
 * This file is part of doomsh.
 *
 * doomsh is free software: you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * doomsh is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * doomsh.  If not, see <https://www.gnu.org/licenses/>.
 */

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * mem.c -- Exhaust your memory
 *
 * This won't do what you expect on Linux if you don't have a ulimit set.
 * Uncomment the memset(3) call at the end of the loop to fill the pointer if
 * you really want to actually use the memory. Do you trust your OOM though?
 */
int main(void){
    void *ptr = NULL;
    unsigned long mb = 5;
    for (;;mb += 5) {
        fprintf(stderr, "%lu MB\n", mb);
        if ((ptr = realloc(ptr, mb * 1000000)) == NULL) {
            raise(SIGABRT);
        }
        /* memset(ptr, 0, mb * 1000000); */
    }
}