I have been taught at school to use database with integer IDs, and I want to know if it’s also a good way to do so in C/C++. I’m making a game, using Ogre3D, so I’d like my game code to use as few cycles as possible.
This is not the exact code (I’m using vectors and it’s about characters and abilities and such), but I’m curious to know if the line where I access the weight is going to cause a bottleneck or not, since I’d doing several array subscript.
struct item
{
float weight;
int mask;
item(): mask(0) {}
}
items[2000];
struct shipment
{
int item_ids[20];
}
shipments[10000];
struct order
{
int shipment_ids[20];
}
orders[3000];
int main()
{
// if I want to access an item's data of a certain order, I do:
for (int i = 0; i < 3000; ++ i)
{
if (items[shipments[orders[4].shipment_ids[5]]].weight > 23.0)
s |= (1<< 31);
}
}
I have heard that putting data into arrays is the best way to gain performance when looping over data repeatedly, I just want to know your opinion on this code…
A good optimizer should be able to compute the exact offset of the memory address each of those items. There is no dependency between loop iterations, so you should be able to get loop unrolled (SIMD processing). Looks great, IMHO. If you can avoid floats, that will also help you.