I'm currently working on a modding library for a particular game, and I have come across a part of the menu system that I can't figure out the purpose of.
The expression in question is this:
unsigned num = ((n + 1) * 4) / 3 + 3;
The game then goes on to use the value to allocate space for menu item structures:
void *newItemStorage = allocate(num * 0x18); // 0x18 = sizeof(menu item structure)
n is the number of menu item structures there are currently, and the code containing this maths is used to allocate space for more structures when there is not currently enough (the old array is copied into the new space with
From what I can tell, this system must be allocating more space than it needs so that fewer reallocations need to happen in the future. However, I don't see why this particular formula must be used to work out the space. The game stores
num and only reallocates again when
num < n + 1.
I actually graphed the formula when I was working out what it did, so here is that graph. (I used
floor to try to simulate integer division.) One of the parts I find most confusing is the fact that
num is in groups of three:
n = 0 and increasing by 1 yields:
4, 5, 7, 8, 9, 11, 12, 13.
If this is some system for preallocating memory, why is it being done like this? If not, what is the system doing?