mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-23 19:01:06 +00:00
[util] Add raw versions of hunk alloc and free
They do not clear memory and thus are good for situations where speed is more critical.
This commit is contained in:
parent
ca63c0360a
commit
8f376a48f8
2 changed files with 33 additions and 4 deletions
|
@ -111,9 +111,12 @@ typedef struct memhunk_s memhunk_t;
|
|||
memhunk_t *Hunk_Init (void *buf, size_t size);
|
||||
void Hunk_Print (memhunk_t *hunk, qboolean all);
|
||||
void Hunk_Check (memhunk_t *hunk);
|
||||
void *Hunk_RawAlloc (memhunk_t *hunk, size_t size) __attribute__((nonnull(1)));
|
||||
void *Hunk_RawAllocName (memhunk_t *hunk, size_t size, const char *name) __attribute__((nonnull(1)));
|
||||
void *Hunk_Alloc (memhunk_t *hunk, size_t size); // returns 0 filled memory
|
||||
void *Hunk_AllocName (memhunk_t *hunk, size_t size, const char *name);
|
||||
size_t Hunk_LowMark (memhunk_t *hunk) __attribute__((pure));
|
||||
void Hunk_RawFreeToLowMark (memhunk_t *hunk, size_t mark) __attribute__((nonnull(1)));
|
||||
void Hunk_FreeToLowMark (memhunk_t *hunk, size_t mark);
|
||||
void *Hunk_TempAlloc (memhunk_t *hunk, size_t size);
|
||||
|
||||
|
|
|
@ -541,6 +541,8 @@ Hunk_FreeToHighMark (memhunk_t *hunk, size_t mark)
|
|||
hunk->tempactive = false;
|
||||
Hunk_FreeToHighMark (hunk, hunk->tempmark);
|
||||
}
|
||||
if (mark == hunk->high_used)
|
||||
return;
|
||||
if (mark > hunk->high_used)
|
||||
Sys_Error ("Hunk_FreeToHighMark: bad mark %zd", mark);
|
||||
memset (hunk->base + hunk->size - hunk->high_used, 0,
|
||||
|
@ -561,9 +563,8 @@ Hunk_HighMark (memhunk_t *hunk)
|
|||
}
|
||||
|
||||
VISIBLE void *
|
||||
Hunk_AllocName (memhunk_t *hunk, size_t size, const char *name)
|
||||
Hunk_RawAllocName (memhunk_t *hunk, size_t size, const char *name)
|
||||
{
|
||||
if (!hunk) { hunk = global_hunk; } //FIXME clean up callers
|
||||
hunkblk_t *h;
|
||||
|
||||
#ifdef PARANOID
|
||||
|
@ -592,8 +593,6 @@ Hunk_AllocName (memhunk_t *hunk, size_t size, const char *name)
|
|||
|
||||
Cache_FreeLow (hunk, hunk->low_used);
|
||||
|
||||
memset (h, 0, size);
|
||||
|
||||
h->size = size;
|
||||
h->sentinal1 = HUNK_SENTINAL;
|
||||
h->sentinal2 = HUNK_SENTINAL;
|
||||
|
@ -603,6 +602,21 @@ Hunk_AllocName (memhunk_t *hunk, size_t size, const char *name)
|
|||
return (void *) (h + 1);
|
||||
}
|
||||
|
||||
VISIBLE void *
|
||||
Hunk_AllocName (memhunk_t *hunk, size_t size, const char *name)
|
||||
{
|
||||
if (!hunk) { hunk = global_hunk; } //FIXME clean up callers
|
||||
void *mem = Hunk_RawAllocName (hunk, size, name);
|
||||
memset (mem, 0, size);
|
||||
return mem;
|
||||
}
|
||||
|
||||
VISIBLE void *
|
||||
Hunk_RawAlloc (memhunk_t *hunk, size_t size)
|
||||
{
|
||||
return Hunk_RawAllocName (hunk, size, "unknown");
|
||||
}
|
||||
|
||||
VISIBLE void *
|
||||
Hunk_Alloc (memhunk_t *hunk, size_t size)
|
||||
{
|
||||
|
@ -617,10 +631,22 @@ Hunk_LowMark (memhunk_t *hunk)
|
|||
return hunk->low_used;
|
||||
}
|
||||
|
||||
VISIBLE void
|
||||
Hunk_RawFreeToLowMark (memhunk_t *hunk, size_t mark)
|
||||
{
|
||||
if (mark == hunk->low_used)
|
||||
return;
|
||||
if (mark > hunk->low_used)
|
||||
Sys_Error ("Hunk_FreeToLowMark: bad mark %zd", mark);
|
||||
hunk->low_used = mark;
|
||||
}
|
||||
|
||||
VISIBLE void
|
||||
Hunk_FreeToLowMark (memhunk_t *hunk, size_t mark)
|
||||
{
|
||||
if (!hunk) { hunk = global_hunk; } //FIXME clean up callers
|
||||
if (mark == hunk->low_used)
|
||||
return;
|
||||
if (mark > hunk->low_used)
|
||||
Sys_Error ("Hunk_FreeToLowMark: bad mark %zd", mark);
|
||||
memset (hunk->base + mark, 0, hunk->low_used - mark);
|
||||
|
|
Loading…
Reference in a new issue