Answer Posted / vijoeyz
[See http://www.geocities.com/vijoeyz/faq/c/padding.txt]
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.
Is This Answer Correct ? | 32 Yes | 2 No |
Post New Answer View All Answers
In C language, a variable name cannot contain?
Define the scope of static variables.
how to execute a program using if else condition and the output should enter number and the number is odd only...
What are the functions to open and close file in c language?
Should I learn data structures in c or python?
What are valid operations on pointers?
What is the difference between far and near ?
how to introdu5ce my self in serco
Why is %d used in c?
Can you apply link and association interchangeably?
What is the meaning of typedef struct in c?
write a program to convert a expression in polish notation(postfix) to inline(normal) something like make 723+* (2+3) x 7 (not sure) just check out its mainly printing expression in postfix form to infix.
What is an arrays?
Linked list is a Linear or non linear explain if linear how it working as a non linear data structures
What is methods in c?