----- Original Message -----
 From: "sandyprak123" <sandyprak123@yahoo.com>
 To: <C-Guru@yahoogroups.com>
 Sent: Thursday, April 22, 2004 3:26 AM
 Subject: [C-Guru] Padding...

> Hi all,
> Can someone explain me what is padding in C.

    All modern CPUs expect that the fundamental types -- int's, float's and
long's -- are stored in the memory at their natural boundary; typically, at
addresses that are multiples of their length.  Some CPU work efficiently if the
memory is properly aligned, and some can work in either case.

    For the following examples, let us assume:

        sizeof (int)   == 4
        sizeof (char)  == 1
        sizeof (float) == 4

    When a C compiler processes a structure, it adds padding bit(s)/byte(s), if
required, between the members to ensure proper alignment.  Consider the
following scenario:

> What is the difference between the following structures:
>
> struct pad1
> {
> int a;
> char c;
> float f;
> };
>

"a" and "f" should occur at an address multiple of 4, whereas "c" can take
any -- odd or even -- address.  So, the structure appears in the memory as
shown:

 ___________________
| a0 | a1 | a2 | a3 |      4-byte alignement
 -------------------       P is padding byte
| c0 | P0 | P1 | P2 |
 -------------------
| f0 | f1 | f2 | f3 |
 -------------------

> and
>
> struct pad2
> {
> float f;
> int a;
> char c;
> };
>
 ___________________
| f0 | f1 | f2 | f3 |      4-byte alignement
 -------------------       P is padding byte
| a0 | a1 | a2 | a3 |
 -------------------
| c0 | P0 | P1 | P2 |
 -------------------

    Following point are worth noting:

    *   The compiler also ensures that the structure as a whole appears at an
            aligned address.

    *   Padding does NOT occur at the beginning of a structure.

    *   The value of padding bytes or bits are implementation defined.

> What is the use of padding?

    *   Padding is useful, for example, in conforming to externally imposed
            layouts of machine registers.

    *   The obvious advantage is efficient access by CPU.


> And finally what is ring buffer?Where is it used.Someone pls. explain
> in detail.

    * A buffer of data which is of fixed size; when it fills, further data is
            placed back at the start of the buffer, overwriting the old data,
            in a "ring". Commonly used in device drivers.

    For more examples, use the Google the keyword "define: ring buffer",
excluding the quotes.

> Thx in advance.
>
> Sandeep

--
Vijay Kumar R Zanvar
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

----- Original Message -----
From: "Shyan Lam" <sflam@sbcglobal.net>
To: <C-Guru@yahoogroups.com>
Sent: Thursday, April 22, 2004 9:22 PM
Subject: RE: [C-Guru] Padding...

Additional note embedded...

> -----Original Message-----
> From: Vijay Kumar R Zanvar [mailto:vijaykumar.rz@globaledgesoft.com]
> Sent: Thursday, April 22, 2004 1:15 AM
> To: C-Guru@yahoogroups.com
> Subject: Re: [C-Guru] Padding...
>
>
> > What is the use of padding?
>
>     *   Padding is useful, for example, in conforming to externally
>               imposed layouts of machine registers.
>
>     *   The obvious advantage is efficient access by CPU.

      *   For some architecture, padding is mandatory as the CPU cannot read
                misaligned datum.  Usually results a "bus error".

HTH
Shyan