On Mon, 23 Apr 2012 08:32:16 -0500 (CDT), Keith Thompson
<
ks...@mib.org> wrote:
>echo ma <
fat...@gmail.com> writes:
>> on a 32bit system.
>>
>> #pragma pack(4)
>> struct TestStruct
>> {
>> unsigned short a;
>> unsigned short b;
>> unsigned int c;
>> };
>> #pragma pack()
>> struct TestStruct t;
>> t.a = 0; //step 1
>> t.b = 1; //step 2
>> t.c = 2; //step 3
>>
>> Questing is : Are these 3 steps having the same perfomance time?
>
>Suppose you find out that one operation is faster than another on
>your system; what would you do with that information? If you need
>to assign a value to t.c, assigning a value to t.a might be faster,
>but that doesn't do yhou much good if it's not the right thing to do.
>
>(Note that "#pragma pack" is non-standard and potentially unsafe;
>see <
http://stackoverflow.com/q/8568432/827263>. For your particular
>struct definition, it's unlikely to have any effect.)
The only real reasons for such tightly packed structures are to save
memory in *very* small systems, or to perform memory mapped device
access ... which brings up both coding issues such as register value
reuse and CPU/platform issues such as bus width, access alignment,
write-back caching, out-of-order execution, write combining, etc.
x86 being an exception, most 32-bit CPUs use memory mapped I/O
exclusively, and it often is desirable to create structures for
accessing groups of contiguous device "registers". However, in such
cases, making a single 32-bit access to A+B in order to write a 16-bit
value to B would be incorrect (and potentially destructive).
As someone else said already, it would be nice if the OP had given a
more complete description of the intended use.
George