mallinfo(3) - wariua/manpages-ko GitHub Wiki

NAME

mallinfo - ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ •๋ณด ์–ป๊ธฐ

SYNOPSIS

#include <malloc.h>

struct mallinfo mallinfo(void);

DESCRIPTION

mallinfo() ํ•จ์ˆ˜๋Š” malloc(3) ๋ฐ ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์ด ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ตฌ์กฐ์ฒด ์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฐธ๊ณ ๋กœ mallinfo()์— ๋ชจ๋“  ํ• ๋‹น์ด ๋ณด์ด๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค. BUGS๋ฅผ ์ฐธ๊ณ ํ•˜๊ณ  malloc_info(3) ์‚ฌ์šฉ์„ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜ํ™˜๋˜๋Š” ๊ตฌ์กฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋˜์–ด ์žˆ๋‹ค.

struct mallinfo {
    int arena;     /* ๋น„ mmap ํ• ๋‹น ๊ณต๊ฐ„ (๋ฐ”์ดํŠธ) */
    int ordblks;   /* ์œ ํœด ์ฒญํฌ ์ˆ˜ */
    int smblks;    /* ์œ ํœด ํŒจ์ŠคํŠธ๋นˆ ๋ธ”๋ก ์ˆ˜ */
    int hblks;     /* mmap ์˜์—ญ ์ˆ˜ */
    int hblkhd;    /* mmap ์˜์—ญ๋“ค์˜ ํ• ๋‹น ๊ณต๊ฐ„ (๋ฐ”์ดํŠธ) */
    int usmblks;   /* ์ด ํ• ๋‹น ๊ณต๊ฐ„ ์ตœ๋Œ€์น˜ (๋ฐ”์ดํŠธ) */
    int fsmblks;   /* ์œ ํœด ํŒจ์ŠคํŠธ๋นˆ ๋ธ”๋ก๋“ค์˜ ๊ณต๊ฐ„ (๋ฐ”์ดํŠธ) */
    int uordblks;  /* ์ด ํ• ๋‹น ๊ณต๊ฐ„ (๋ฐ”์ดํŠธ) */
    int fordblks;  /* ์ด ์œ ํœด ๊ณต๊ฐ„ (๋ฐ”์ดํŠธ) */
    int keepcost;  /* ์ตœ์ƒ๋‹จ์˜ ํ•ด์ œ ๊ฐ€๋Šฅ ๊ณต๊ฐ„ (๋ฐ”์ดํŠธ) */
};

mallinfo ๊ตฌ์กฐ์ฒด์˜ ํ•„๋“œ๋“ค์€ ๋‹ค์Œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

arena
mmap(2) ์™ธ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ (์ฆ‰ ํž™์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜) ์ด๋Ÿ‰. ์ด ์ˆ˜์น˜์—๋Š” ์‚ฌ์šฉ ์ค‘์ธ ๋ธ”๋ก๊ณผ ์œ ํœด ๋ชฉ๋ก์˜ ๋ธ”๋ก์ด ๋ชจ๋‘ ํฌํ•จ๋œ๋‹ค.
ordblks
ํ‰๋ฒ”ํ•œ (์ฆ‰ ํŒจ์ŠคํŠธ๋นˆ ์•„๋‹Œ) ์œ ํœด ๋ธ”๋ก ๊ฐœ์ˆ˜.
smblks
ํŒจ์ŠคํŠธ๋นˆ ์œ ํœด ๋ธ”๋ก ๊ฐœ์ˆ˜. (mallopt(3) ์ฐธ๊ณ .)
hblks
ํ˜„์žฌ mmap(2)์œผ๋กœ ํ• ๋‹น๋œ ๋ธ”๋ก ๊ฐœ์ˆ˜. (mallopt(3)์˜ M_MMAP_THRESHOLD ๋…ผ์˜ ์ฐธ๊ณ .)
hblkhd
ํ˜„์žฌ mmap(2)์œผ๋กœ ํ• ๋‹น๋œ ๋ธ”๋ก๋“ค์˜ ๋ฐ”์ดํŠธ ์ˆ˜.
usmblks
ํ• ๋‹น ๊ณต๊ฐ„์˜ "์ตœ๊ณ  ์ˆ˜์œ„ ์„ "์ด๋‹ค. ์ฆ‰ ์ง€๊ธˆ๊นŒ์ง€ ํ• ๋‹น ๊ณต๊ฐ„์˜ ์ตœ๋Œ€ ์–‘์ด๋‹ค. ์Šค๋ ˆ๋“œ๋ฅผ ์“ฐ์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์—์„œ๋งŒ ์ด ํ•„๋“œ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
fsmblks
ํŒจ์ŠคํŠธ๋นˆ ์œ ํœด ๋ธ”๋ก๋“ค์˜ ์ด ๋ฐ”์ดํŠธ ์ˆ˜.
uordblks
์‚ฌ์šฉ ์ค‘์ธ ํ• ๋‹น๋“ค์— ์“ฐ๋Š” ์ด ๋ฐ”์ดํŠธ ์ˆ˜.
fordblks
์œ ํœด ๋ธ”๋ก๋“ค์˜ ์ด ๋ฐ”์ดํŠธ ์ˆ˜.
keepcost
ํž™ ์ƒ๋‹จ์˜ ํ•ด์ œ ๊ฐ€๋Šฅํ•œ ์œ ํœด ๊ณต๊ฐ„์˜ ์ด๋Ÿ‰. ๋‹ค๋ฅธ ์ œ์•ฝ์ด ์—†๋‹ค๋ฉด (์ฆ‰ ํŽ˜์ด์ง€ ์ •๋ ฌ ์ œ์•ฝ ๋“ฑ์„ ๋ฌด์‹œํ•  ๋•Œ) malloc_trim(3)์œผ๋กœ ํ•ด์ œ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋ฐ”์ดํŠธ ์ˆ˜์ด๋‹ค.

ATTRIBUTES

์ด ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…์€ attributes(7)๋ฅผ ๋ณด๋ผ.

์ธํ„ฐํŽ˜์ด์Šค ์†์„ฑ ๊ฐ’
mallinfo() ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ MT-Unsafe init const:mallopt

mallinfo()๋Š” ๋ช‡๋ช‡ ์ „์—ญ ๋‚ด๋ถ€ ๊ฐ์ฒด๋“ค์— ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค. ๋น„์›์ž์  ๋ณ€๊ฒฝ ์‹œ ๋ชจ์ˆœ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜๋„ ์žˆ๋‹ค. const:mallopt์˜ ์‹๋ณ„์ž mallopt๊ฐ€ ๋œปํ•˜๋Š” ๊ฒƒ์€ mallopt()๋Š” ์ „์—ญ ๋‚ด๋ถ€ ๊ฐ์ฒด๋ฅผ ์›์ž์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ mallinfo()๊ฐ€ ์ถฉ๋ถ„ํžˆ ์•ˆ์ „ํ•  ๊ฒƒ์ด๊ณ , ๋น„์›์ž์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค์€ ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

CONFORMING TO

์ด ํ•จ์ˆ˜๋Š” POSIX๋‚˜ C ํ‘œ์ค€์— ๋ช…์„ธ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค. ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ V ํŒŒ์ƒ ์‹œ์Šคํ…œ์— ๋น„์Šทํ•œ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋ฉฐ SVID์— ๋ช…์„ธ๋˜์—ˆ๋‹ค.

BUGS

์ฃผ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์˜์—ญ์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋‹ค๋ฅธ ์•„๋ ˆ๋‚˜์—์„œ์˜ ํ• ๋‹น์€ ๋น ์ ธ ์žˆ๋‹ค. ๋‹ค๋ฅธ ์•„๋ ˆ๋‚˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ๋Œ€์•ˆ์œผ๋กœ๋Š” malloc_stats(3)์™€ malloc_info(3)๋ฅผ ๋ณด๋ผ.

mallinfo ๊ตฌ์กฐ์ฒด์˜ ํ•„๋“œ๋“ค์ด int ํƒ€์ž…์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๋ถ€์˜ ๋ช‡๋ช‡ ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐ’๋“ค์ด long ํƒ€์ž…์ผ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ป์–ด ์˜จ ๊ฐ’์ด ์ž˜๋ ค์„œ ๋ถ€์ •ํ™•ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

EXAMPLE

์•„๋ž˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” mallinfo()๋ฅผ ์ด์šฉํ•ด ํ• ๋‹น ์ „๊ณผ ํ›„, ๊ทธ๋ฆฌ๊ณ  ์ผ๋ถ€ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ํ•ด์ œํ•œ ํ›„์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ†ต๊ณ„๋ฅผ ์–ป์–ด ์˜จ๋‹ค. ๊ทธ ํ†ต๊ณ„๋ฅผ ํ‘œ์ค€ ์ถœ๋ ฅ์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

์ฒ˜์Œ ๋‘ ๊ฐœ์˜ ๋ช…๋ นํ–‰ ์ธ์ž๋Š” malloc(3)์œผ๋กœ ํ• ๋‹นํ•  ๋ธ”๋ก์˜ ์ˆ˜์™€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

๋‚˜๋จธ์ง€ ์„ธ ์ธ์ž๋Š” ํ• ๋‹น ๋ธ”๋ก๋“ค ์ค‘ ์–ด๋А ๊ฒƒ์„ free(3)๋กœ ํ•ด์ œํ• ์ง€ ์ง€์ •ํ•œ๋‹ค. ์ด ์„ธ ์ธ์ž๋Š” ์„ ํƒ์ ์ด๋ฉฐ, (์ฐจ๋ก€๋Œ€๋กœ) ๋ธ”๋ก ํ•ด์ œ ๋ฃจํ”„ ๋‚ด์—์„œ ์“ธ ๋‹จ๊ณ„ ํฌ๊ธฐ (๊ธฐ๋ณธ์€ 1, ์ฆ‰ ๋ฒ”์œ„ ๋‚ด ๋ชจ๋“  ๋ธ”๋ก์„ ํ•ด์ œ), ํ•ด์ œํ•  ์ฒซ ๋ธ”๋ก์˜ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ์€ 0, ์ฆ‰ ์ฒซ ๋ฒˆ์งธ ํ• ๋‹น ๋ธ”๋ก), ํ•ด์ œํ•  ๋งˆ์ง€๋ง‰ ๋ธ”๋ก์˜ ์ˆœ๋ฒˆ์— 1์„ ๋”ํ•œ ๊ฒƒ (๊ธฐ๋ณธ์€ ์ตœ๋Œ€ ๋ธ”๋ก ๋ฒˆํ˜ธ์— 1์„ ๋”ํ•œ ๊ฒƒ)์ด๋‹ค. ์ด ์„ธ ์ธ์ž๋ฅผ ์ƒ๋žตํ•œ ๊ฒฝ์šฐ์˜ ๊ธฐ๋ณธ๊ฐ’์€ ๋ชจ๋“  ํ• ๋‹น ๋ธ”๋ก๋“ค์„ ํ•ด์ œํ•˜๊ฒŒ ํ•œ๋‹ค.

๋‹ค์Œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์˜ˆ์—์„œ๋Š” 100๋ฐ”์ดํŠธ ํ• ๋‹น์„ 1000๋ฒˆ ์ˆ˜ํ–‰ํ•˜๊ณ ์„œ ํ• ๋‹น ๋ธ”๋ก ๋‘ ๊ฐœ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ํ•ด์ œํ•œ๋‹ค.

$ ./a.out 1000 100 2
============== Before allocating blocks ==============
Total non-mmapped bytes (arena):       0
# of free chunks (ordblks):            1
# of free fastbin blocks (smblks):     0
# of mapped regions (hblks):           0
Bytes in mapped regions (hblkhd):      0
Max. total allocated space (usmblks):  0
Free bytes held in fastbins (fsmblks): 0
Total allocated space (uordblks):      0
Total free space (fordblks):           0
Topmost releasable block (keepcost):   0

============== After allocating blocks ==============
Total non-mmapped bytes (arena):       135168
# of free chunks (ordblks):            1
# of free fastbin blocks (smblks):     0
# of mapped regions (hblks):           0
Bytes in mapped regions (hblkhd):      0
Max. total allocated space (usmblks):  0
Free bytes held in fastbins (fsmblks): 0
Total allocated space (uordblks):      104000
Total free space (fordblks):           31168
Topmost releasable block (keepcost):   31168

============== After freeing blocks ==============
Total non-mmapped bytes (arena):       135168
# of free chunks (ordblks):            501
# of free fastbin blocks (smblks):     0
# of mapped regions (hblks):           0
Bytes in mapped regions (hblkhd):      0
Max. total allocated space (usmblks):  0
Free bytes held in fastbins (fsmblks): 0
Total allocated space (uordblks):      52000
Total free space (fordblks):           83168
Topmost releasable block (keepcost):   31168

ํ”„๋กœ๊ทธ๋žจ ์†Œ์Šค

#include <malloc.h>
#include <stdlib.h>
#include <string.h>

static void
display_mallinfo(void)
{
    struct mallinfo mi;

    mi = mallinfo();

    printf("Total non-mmapped bytes (arena):       %d\n", mi.arena);
    printf("# of free chunks (ordblks):            %d\n", mi.ordblks);
    printf("# of free fastbin blocks (smblks):     %d\n", mi.smblks);
    printf("# of mapped regions (hblks):           %d\n", mi.hblks);
    printf("Bytes in mapped regions (hblkhd):      %d\n", mi.hblkhd);
    printf("Max. total allocated space (usmblks):  %d\n", mi.usmblks);
    printf("Free bytes held in fastbins (fsmblks): %d\n", mi.fsmblks);
    printf("Total allocated space (uordblks):      %d\n", mi.uordblks);
    printf("Total free space (fordblks):           %d\n", mi.fordblks);
    printf("Topmost releasable block (keepcost):   %d\n", mi.keepcost);
}

int
main(int argc, char *argv[])
{
#define MAX_ALLOCS 2000000
    char *alloc[MAX_ALLOCS];
    int numBlocks, j, freeBegin, freeEnd, freeStep;
    size_t blockSize;

    if (argc < 3 || strcmp(argv[1], "--help") == 0) {
        fprintf(stderr, "%s num-blocks block-size [free-step "
                "[start-free [end-free]]]\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    numBlocks = atoi(argv[1]);
    blockSize = atoi(argv[2]);
    freeStep = (argc > 3) ? atoi(argv[3]) : 1;
    freeBegin = (argc > 4) ? atoi(argv[4]) : 0;
    freeEnd = (argc > 5) ? atoi(argv[5]) : numBlocks;

    printf("============== Before allocating blocks ==============\n");
    display_mallinfo();

    for (j = 0; j < numBlocks; j++) {
        if (numBlocks >= MAX_ALLOCS) {
            fprintf(stderr, "Too many allocations\n");
            exit(EXIT_FAILURE);
        }

        alloc[j] = malloc(blockSize);
        if (alloc[j] == NULL) {
            perror("malloc");
            exit(EXIT_FAILURE);
        }
    }

    printf("\n============== After allocating blocks ==============\n");
    display_mallinfo();

    for (j = freeBegin; j < freeEnd; j += freeStep)
        free(alloc[j]);

    printf("\n============== After freeing blocks ==============\n");
    display_mallinfo();

    exit(EXIT_SUCCESS);
}

SEE ALSO

mmap(2), malloc(3), malloc_info(3), malloc_stats(3), malloc_trim(3), mallopt(3)


2019-03-06

โš ๏ธ **GitHub.com Fallback** โš ๏ธ