Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

shitalloc.c

Name: Anonymous 2009-02-02 2:34

I was bored, so I wrote an extremely shitty "memory allocator", if you could call it that.


#include <stdbool.h>
#include <stdlib.h>

typedef struct Node {
    bool   in_use;      // whether the node is in use.
    size_t size;        // the size of the node
    struct Node  *next; // the next node in the list.
} Node;

static Node *heap = NULL;

void shitalloc_init(size_t size)
{
    if((heap = malloc(size))) {
        heap->in_use = false;
        heap->size   = size - sizeof(Node);
        heap->next   = NULL;
    }
}

void shitalloc_cleanup()
{
    free(heap);
}

void *shitalloc(size_t size)
{
    Node *n = heap;
    void *ptr = NULL;
   
    // Look for a node that's not in use and that's big enough.
    while(n && (n->in_use || n->size < size))
        n = n->next;

    // If we've found a node that's too big, split it up.
    if(n && n->size > size) {
        Node *n2   = (void*)n + sizeof(Node) + size;
        n2->in_use = false;
        n2->size   = n->size - size - sizeof(Node);
        n2->next   = n->next;
        n->next    = n2;
        n->size    = size;
    }

    // If we've found a node, mark it as in-use and get the pointer.
    if(n) {
        n->in_use = true;
        ptr = (void*)n + sizeof(Node);
    }

    return ptr;
}

void shitfree(void *ptr)
{
    Node *n;

    if(ptr) {
        n = ptr - sizeof(Node);
        n->in_use = false;
    }
}

size_t shitused()
{
    Node *n;
    size_t size = 0;

    for(n = heap; n; n = n->next)
        size += sizeof(Node) + (n->in_use ? n->size : 0);

    return size;
}

Name: Anonymous 2009-02-02 17:30

>>13
This is why I should use tripcodes.

Anyways, here's a new-and-improved version of >>10. This one handles sbrk() errors and fixes a bug when splitting a node. It also groups unused nodes into larger nodes when freeing.

hajj-malloc.tar.bz2.b64

QlpoOTFBWSZTWWTfzBQADYn/hP/SJQB7////////5P////4AAQAIYBDe8a+V6BOigW7lvW9N5vcA
AAUwHaa2Up0MONpNNrZkTdZhqZJplMm0T1NNBAAGgAaDQAAAAAAABKaE0QQ1DSeqeqf6mjKaj0aT
QNBkGgDCDJpgjTRhGgOBoDQaNAyaAA0ABiaGmgaaAGjRoAGjQSakQmSYETE01GTT0U9NJ6TQ8p6m
m0T1M1BkAaNNGgAyBFJEm2qnqPUeUD0mjTxQ/UgHogZBgIMjJpoDTIDTJoCqEIJoTI0mmUxT0NRt
GqaabU0/VNHo9Sb1Rk9QPDUjRoGnqaD0n8g/3t+EX8DXY+4RVADE0AcrrR2KMdCYUrOwZRfxc97A
ZaoxgyEiwZJECogRQ+v979qQN56GwelG59Fp5rFVdrjA+oMCme6yjwWlyrN5Aq0UPLbC90a8kNqV
J7hJ/j+tSAdf8bfRuBi3yWFCkGMsKEExRxkZjHIpTSSKRIpmDQjzbFHeLRiGp11IU76luIcGBUJ8
7r7QdagwCTBkgf9EoENIMShwkhEuh+hKKfrXRxe59bD52Hcye6Upamzc5cI+K6ojq+/TRq4rRGDI
e/u5MxTn74TmPVzGJkNvT61NLkaydoTvFG9ZUIdkxEI97zHJD35UOW8siZfFHnir9tY79fE0dPk/
TkRRX9h8vqyBw0nb/j/Rs31rtF19J2meOTur7VKlvuPLT6X6Hh6H3maX+J6Wzc+GJ+Rmami6ytGh
c9TJRnT/JLZZo9DR9d/GfJ6nzZMR2+P1HRry7jsauj3JcXYjmwlxvExLV42HA+JldllubMz7sZ+n
r5J7nFmp3KdS6yXU5OLCjms+tdddkluyRLjFNzBk4ydZKvBxWXKZqcTZnH1dKynizU8LtGrcwu+D
v9fB58ruy3qlenM+aTL5pDul8FelNej23ZeezmcUHQvNoG+pLNXDWIys/kjKsrIhplKFA5NFmPpB
KJwtL+9/N/e5ZpL668Hy1T8JImqIFMJAfIYCQDDXRJcVEhPnMmeVk0H3qFR/Q3oxx3HZQ19cudb1
xDdmjZlm+423zamoxoAsMUTk+yY+pMWz8Ny/PW68F34hO/dJeTpFEp/Cuv0mDFb7XiIM4zh0SlDw
h36S7vraZiJRjXg9INIgcLKyCWKb7IoBPBBJVgQdRiisIpHZNSw+SRJBVkJSTQio+0tk0rKNIxbn
k3O4Wfhi2mEENci9nspI14vPK1XfrHblFZ9CR8MNshZOHB+7cZGMsycr5RHKWxYEXgeMxW7K6Inq
vr0me7a0cceDl6n/ZKYyBJ+YGsyFy6EkhJ22NjHLdaOtb02xYunNu3djrctRrlldtogk1hnFSWm4
zu6cyB1bBGOKt2XvKrrw5pVtzhqnz4OWMGLuxi8RYmrRGmzwX8OkteUQSYlgU6ECrQZc27pzwSQV
DRhdqJnpBBckgOPTemmFaZWtRn6/1x8OjpTnUkZ13smImCUp/IPtkoJtE0HzHxafD3N+1YcAD8W7
Jv1Si0BBieAsz6hPGMu9GYNQqJqKvZpxWGq9HV5HIztmEEknMQ2VT7b8jPdZt7IhnkULQh4/EflK
Gg/amtVVeTvr3bXuewhWLepLPpeOBhfenHCzj8k5K35lladoPpdD+99LVaHuTH6krvqV7kw/GpKv
oSoM4konGCFcUI3hIJFsCUBACX7lfqDzH6X9a6XtcEvnYYwn8y7Dv87+Xz0n1yK7Px/mvHtYcWTD
HPla7LNrofjz1mfPIfYrwzkPkRViw7D6kIEKUE1oMyoWTga6umRCgxz5reIzlYGCUWoajdGJZnGO
G39nu7HgMxz6L3+nsfBCB7/oH9vz+qx6BIxUiiJ30WTIgaG0bz5g97zhPBECZh7nvPksBcz9KxY0
j+2o3c/mz3xoaHyM9Gi5LBb6Jxkhw+H1pwd2aYgvN2U77RrYpmdpN5YDNA7TaC19wQmXjk3tAUip
rASD09KzZnl8Xp+ufXA8hwrxZPlqoWZypez+rw483x5QyVODIUmSbN1XeG2ijuytbdJmhmczGtc0
DWhE14ZERekmIO8ScIJZ8K0PQeyI/3+pdR5X6mDJS71mURZmYsM0vsPspR+1d/41ZvYyZoe1wTEd
8P+1xdlT8PyrsOp7F2iUZwa5sFLs7vaVkyMJTEpSKRg6jCMLmTNWrV1mjipd9jDiuUXcXWo4ruaW
pZ0dTJ+52tzCmrrb2y66yWGzC7Ns6pbcUuBk5HRKMnYFJSSTB7ch5Fu1klJ4n0XhLep1Kcg3pLo5
Eo5I5XZM1OxdSl2Cxkpg7hwWLkesk1O1FNCinQlTg3tnafsNGw0g9rg9qmkPYi7JJMc3g8j3jpGy
LHao8Y1ZxLVdqibHcyeNdRSSmyiyVO+yw1ZxFMnNSFIzhkYSulRZO2IoS074iVRRE+DU5uLVgLPA
8CzgcocElniJI3Opr1t6XAyLtlN7uRdZ5Eo7EuROykpJSiUnYlTgzKXRzM44LZP0lPFC51yyXNG5
TTcuXXbIxyYdSMKU8jiLGks2kLrtykktVzRddZGaMjKzglDg3uZkamaUsI8XFY3xhvLNxG9qoszb
KOps3NWaMLRNl5dCRgYM8uiP3NFo0YWc9zU2c0cGF44o0XdbBhFkrphg2aMlMKaLFljUM7DtgQ5D
bMkjt2ynE5ZWumwISFmJ4yoSB6WrykspiI/+iTM9T5/nqPlozWtu/AiDejGExX9W2ysIhexdoetG
u32yehw02JmJQcSobEom2tmFUSBbAH67NwyP/TflsDDUKmi56rXgojNJbUcxnCXZES1c+J+jybT5
dayfgYTzr9J3Wx1IbmwJOflAVFioDKnVAZPlKfUUEZDzDAq8lqsCPR1hnyGAUmXIyjIywGxoGHbI
w1nPawTI0JZzLy2bmETtxCyiFhoVwoKFQtei0BQQsQ+OrI9TDeUZmoIgyBkyLAmBQPr5cf+k1SBx
GNQuIQSM/7xN0xIt9zzuZxP1OI3lJIpD0UYLNFslW89oY8Sdt27lWpOe5461bgcLS4OmbxUevAxa
tS0JZOzoMXm9i0Q4mhDVG7vXCKKZjVZyOXUCaMv70Xx16bY3qyyBBhVbOCoCNUMyqGF4XBjFFjas
HQMVUVm4laAJIR50M+jjFM3qbcBmDIlxb6zg0rVnNnCbreFOpqt99GoYPGl2WOSNbeG73t8bYHCc
JudktqKm63Tq2loDauJJaSjUc4zGFioUZHZN4cWb8LWotahiOOc6t/KYsb8nIVRpJU0fNHSxHe64
fsSqHZxTPs83gtd/NURKqWtRZaiqoZvhLBKBOwzymXp5rky7MCp6xcsJ2xuk8WdEXBNzAxkSsUiM
1JwL71ekLskMtDH/69f+p5onT09jv9FKlNWVJh+eZ7Xx+7/TTUdqGqSZcpRrVnIQRAh50BEAv1XJ
iA9E66D8qWIZntmmhMFGvswoKVAt7NCRFsSz0WmFIRoyWQdQkUl5B7K4KistJuHOT2/ZwK8M1kN+
nYbvHzWhhsgLJRgUUzwkcw0JxOd1rAw5tZHX7WHjMdwwOPzdAXhLzl0h0sFBRZDjtwnLGCsiCgsx
B5A7XluBzYTLGhtSlI2YpXEhliS9+BpyYcZJiwkn3iQwiDPqiKX71Wrda0QTU0SWfHT9rGScR/Ad
JS2TnRVaK5ZHzbz7xjsjy6VWeW60FbS3oZ0XQ3/HPsYqERsjWIRs3Ui7FqNkbW3c672UKsmp3OEd
qY/kTHoFQVGeajLPmkcCSKHCWRFi1IYocawTDfYGUvB6NvM8ZKncHDBSjE9TRUicHDw0QgJ/8w0X
XYlbRs9GNUUwgkO9rITeVNcpi1V5lUmZcCBDGu1yyFIFizQSyB11Y0JhgyUCC4zLSixGJdNKSlDN
hEOhMQZ5+s3Rkhamc1NJYYFQBGOq/Nw5zKM7VFTp+GsEWSXOjXXchJ7BWUJqnWwGJFKYIRIsO+az
HjIckRZHyQR5jcj7vejfDTml1Ect9Q4yZIwvJZDD2tOtSu/30an5V2Jy1fhTaJS6LqkmOghupHAC
haINW/IG0F1w4dL6lrnSCsZhKO6I37d7zT1Sg8uKP4pj7SUODGPVBnUW0+C2r4BUe/HPus1I2g/L
Vi7hmtuhHnURvm2yy33EvbaXNo5Qzh3BdRTLCgomipSgjd0yc4taeY1BRST2IQoPANgeDtOxhlIZ
skNjN+4PAk1w0NsDpMucjOozhN0mpkh3t83Jc4h5cxOnZZGUYiSZz10cBpiLXPlp1n4JtjAuc9wW
RLWUo+ymuKwpSpwV3KQlYluqO4WQJi2zxWT5wJUtVRl3+Ik0XWcgQH3EYDmxQMUKBn5DloLx6u71
5yX+7KS7TEU73sEKCFk2GFLHb7lgljo8Zs4YToEhrN1GWKxeC4LgEEh0QFG8YSv91vPZ5BATtwJh
Y7XY08fPJOGpLm7vCEYKucPHA8Qp6S9pdGdk73q3ltYNyrIcdEq7M7XbLRx8E4UpCGum1cLzM0Cg
zjO6m0MZAxgIZ7HEbRq4UcYiY+K8JyEtIQNJoVVipBFyhLA56FSb0pOEUaM4hOakKSxmfCN9REX0
3W4raXJ0EpxahSqd2yHlAjCctb4xgHTSwFfQkHILvf+O7q8u3baL5pRzI1ivJD32UUma7vtLuZ+c
zc4hedNg7dbpViNzpOanvCVYbEOox9e8MWxEg8ahWAepgsOrZyfEhYtq42LruarSTD1ydE1JVjFx
FDEBdZwpvykAXFX/i7kinChIMm/mCgA=

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List