File: cg_malloc.c

package info (click to toggle)
libcgns 2.5.4-3
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 2,740 kB
  • ctags: 4,493
  • sloc: ansic: 46,717; fortran: 1,341; sh: 368; makefile: 259
file content (68 lines) | stat: -rw-r--r-- 1,698 bytes parent folder | download | duplicates (5)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static size_t mem_now = 0;
static size_t mem_max = 0;
static size_t alloc_calls = 0;
static size_t free_calls = 0;

void *cgmalloc(size_t bytes) {
    size_t *data = (size_t *) malloc (bytes + 2 * sizeof(size_t));
    if (data) {
        *data++ = bytes;
        *data++ = (size_t)(data + 1);
        mem_now += bytes;
        if (mem_max < mem_now) mem_max = mem_now;
    }
    alloc_calls++;
    return (void *)data;
}

void *cgrealloc(void *olddata, size_t bytes) {
    size_t *data = (size_t *)olddata;
    if (data && *(data-1) == (size_t)olddata) {
        data -= 2;
        mem_now -= *data;
    }
    data = (size_t *) realloc (data, bytes + 2 * sizeof(size_t));
    if (data) {
        *data++ = bytes;
        *data++ = (size_t)(data + 1);
        mem_now += bytes;
        if (mem_max < mem_now) mem_max = mem_now;
    }
/*    alloc_calls++;*/
    return (void *)data;
}

void *cgcalloc(size_t num, size_t bytes) {
    size_t count = num * bytes;
    size_t *data = (size_t *) malloc (count + 2 * sizeof(size_t));
    if (data) {
        *data++ = count;
        *data++ = (size_t)(data + 1);
        mem_now += count;
        if (mem_max < mem_now) mem_max = mem_now;
        memset(data, 0, count);
    }
    alloc_calls++;
    return (void *)data;
}

void cgfree(void *freedata) {
    size_t *data = (size_t *)freedata;
    if (data && *(data-1) == (size_t)freedata) {
        data -= 2;
        mem_now -= *data;
        free (data);
    }
    free_calls++;
}

size_t cgmemnow() {return mem_now;}
size_t cgmemmax() {return mem_max;}

size_t cgalloccalls() {return alloc_calls;}
size_t cgfreecalls()  {return free_calls;}