Re: offsets of fields in a structure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2007/10/19, Giulio Rossato <giulio.rossato@xxxxxxxxxxxxx>:
> Suppose that I define the following structure
> struct astruct {
>     int field1;
>     float field2;
>     char field3[10];
> };
>
> and declare the variable
> struct astruct r;
>
> The amount of memory specified by the structure is not the sum of the
> storage specified by each of its member types. This vary from one
> machine and C compiler to another. On most compuers, objects of certain
> types may not begin anywhere in memory but are constrained to start at
> certain boundaries. For example, an integer of length 4 bytes may have
> to start at an address divisible by 4, and a real number of length 8 may
> have to start at an address divisible by 8. Thus, in my example, if the
> starting address of r is 200, the integer occupies bytes 200 through
> 203, but the real number cannot start at byte 204, since that location
> is not divisible by 8. Thus the real number must start at byte 208.
> The C compiler associates to each member identifier of a structure an
> offset that specifies how far beyond the start of the structure the
> location of that field is. To calculate the location of a member in a
> structure, the offset of the member identifier is added to the base
> address of the structure variable.
> Now the question.
> I want write a function that receives as parameters a start address and
> a "description of a structure" and returns the offsets of the fields.
> The structure is not known at compile time. The offsets should be
> calculated at runtime and the code should be independent of the machine.
> How should be written this function?


maybe typeof() can help you, and use __attribute__((packed)) if you
want the real size of structure, this is an alignament thingie.

-- 
noone is alone.
-
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Assembler]     [Git]     [Kernel List]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [C Programming]     [Yosemite Campsites]     [Yosemite News]     [GCC Help]

  Powered by Linux