• Welcome to Dark Bit Factory & Gravity.
 

structs in c causing big size diffrences.

Started by frea, February 26, 2008

Previous topic - Next topic

0 Members and 0 Guests are viewing this topic.

frea

Hi!
I can't understand one thing. I've been writing a small program, and at one point i needed to use a struct more. Merely by adding it, and doing a single instruction using it the size jumped by 1.5kb uncompressed. I disassembled 2 versions, one with this single instruction one without. the asm code differed very slightly. ( ~12 lines in ~2k lines were different )

So, if the code doesn't differ, why am i getting such a huge change?


typedef struct Primitive_
{
  unsigned int type;
  float pos[ 3 ], col[ 3 ];
  float rotx, roty;
  union
  {
     float sphere;
     float cube[ 3 ];
  };
} Primitive;



Primitive prim[ PRIMITIVENUM ];
(...)
sub( vector1, prim[ id ].pos, vector2 ); //this line adds 1.5kb, sub is also called previously on different vectors

Stripping the contents of Primitive doesn't reduce size.
Nananan.

taj

How big is PRIMITIVENUM?
Say around 50?

Thats your 1.5k there.

--
DBF debugging service.
Challenge Trophies Won:

frea

#2
#define PRIMITIVENUM 2
:)
changing to 10000 makes no size difference. ( all arrays are in .bss section )

edit: mistake, it causes diffrence.
But that what is surpricing that the difference is between PRIMITIVEMNUM beeing 2 and 3. What the hell? ( even if no code uses the array! )

edit2: it is even more werid. For purpouses of finding why i have such problem i have commented out the rest of the function. I tried compiling with -Os, and the size dropped greatly, now there is no jump on primnum 2 to 3. That what is interesting that by uncommenting the rest of function i get ~1.5kb again but, with -O2 i don't get 2x 1.5 kb but only 1x1.5kb. The uncommented part gives sixty-something byte diffrence in file size if used with -O2.

So the file size doesn't differ to much with -O2/-Os, but it has a werid growth when (un)commenting :).


edit3: don't ask me :). I've switched computers and now no werid behaviour. At home everything's ok :).
Nananan.

Jim

Maybe depending on size the compiler is bringing in a library routine like memcpy or mul to do some internal sums instead of doing them inline?  But it sounds like your problem has gone away for now :)
Jim
Challenge Trophies Won:

frea

It seems that the compiler at labs is somewhat broken :p. I comment ~30 function calls and get 20bytes less uncompressed, although it ereases ~100 lines of asm.
Nananan.