Golgappa.net | Golgappa.org | BagIndia.net | BodyIndia.Com | CabIndia.net | CarsBikes.net | CarsBikes.org | CashIndia.net | ConsumerIndia.net | CookingIndia.net | DataIndia.net | DealIndia.net | EmailIndia.net | FirstTablet.com | FirstTourist.com | ForsaleIndia.net | IndiaBody.Com | IndiaCab.net | IndiaCash.net | IndiaModel.net | KidForum.net | OfficeIndia.net | PaysIndia.com | RestaurantIndia.net | RestaurantsIndia.net | SaleForum.net | SellForum.net | SoldIndia.com | StarIndia.net | TomatoCab.com | TomatoCabs.com | TownIndia.com
Interested to Buy Any Domain ? << Click Here >> for more details...

What is structure padding ?

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


Please Help Members By Posting Answers For Below Questions

Explain how can type-insensitive macros be created?

989


What does c mean?

1040


How can I write functions that take a variable number of arguments?

1128


Do variables need to be initialized?

1041


Where in memory are my variables stored?

1178


Explain can the sizeof operator be used to tell the size of an array passed to a function?

1068


Write a C program to help a HiFi’s Restaurant automate its breakfast billing system. Your assignment should implement the following items: a. Show the customer the different breakfast items offered by the HiFi’s Restaurant. b. Allow the customer to select more than one item from the menu. c. Calculate and print the bill to the customer. d. Produce a report to present your complete program and show more sample output. Assume that the HiFi’s Restaurant offers the following breakfast menu: Plain Egg $2.50 Bacon and Egg $3.45 Muffin $2.20 French Toast $2.95 Fruit Basket $3.45 Cereal $0.70 Coffee $1.50 Tea $1.80

3124


What is the use of header?

1089


a construct the"else" part of "if" statement contains anoth "if else" statement is called a) if-else b) else-if-else c) if-else-if-else d) chain if/if-else-if

1139


Multiply an Integer Number by 2 Without Using Multiplication Operator

764


Why shouldn’t I start variable names with underscores?

1062


Can a void pointer point to a function?

1020


What is the difference between union and structure in c?

1174


What is a file descriptor in c?

1127


What is meant by preprocessor in c?

1010