Referencing struct fields in C
Referencing struct fields in C
- Subject: Referencing struct fields in C
- From: Oleg Krupnov <email@hidden>
- Date: Mon, 30 May 2011 15:02:09 +0300
This question is related to C language, rather than Obj-C.
I have a data structure
typedef struct
{
int x;
int y;
} A;
In my code, I have a function foo(bool xOrY) that runs a long-lasting
loop that iterates through a huge array of A structures and for each
structure, it should get x or y field. The choice of x or y is the
same on each iteration, but may change between different calls of
foo(bool xOrY).
void foo(bool xOrY)
{
for(int i = 0; i < count; ++i)
{
if (xOrY)
{
int value = a[i].y;
...
}
else
{
int value = a[i].x;
...
}
}
}
I am looking to optimize this code, because the line if(xOrY) yields
the same result on each step. So I am thinking about this code:
void foo(bool xOrY)
{
struct A test;
size_t offset = 0;
if (xOrY)
{
offset = (char*)&(a.y) - (char*)&a;
}
else
{
offset = (char*)&(a.x) - (char*)&a;
}
for(int i = 0; i < count; ++i)
{
int value = *(int*)((char*)a + offset);
}
}
Is this approach valid at all? The compiler doesn't show any problem,
but I wonder if there can be any caveats related to structure aligning
etc.? It seems like it should not be a problem, because I am measuring
the offset in run time, but I am not quite sure...
I also thought about using a function pointer to switch between two
tiny functions, one of them returning x and the other y from a given
struct instance, but it seems somewhat more expensive than the above
approach (push/pop param from stack, call, return)
Thanks a lot!
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden