How to avoid Structure Padding in C?

Prerequisites: Structure Member Alignment, Padding and Data Packing

In Structure, sometimes the size of the structure is more than the size of all structures members because of structure padding.

Below is an example of Structure padding:



filter_none

edit
close

play_arrow

link
brightness_4
code

// C program to show an example
// of Structure padding
#include <stdio.h>
  
struct s {
    int i;
    char ch;
    double d;
};
  
int main()
{
    struct s A;
    printf("Size of A is: %ld", sizeof(A));
}

chevron_right


Output:

Size of A is: 16

Note: But what actual size of all structure member is 13 Bytes. So here total 3 bytes are wasted.

So, to avoid structure padding we can use pragma pack as well as an attribute.
Below are the solutions to avoid structure padding:

Program-1: Using pragma pack

filter_none

edit
close

play_arrow

link
brightness_4
code

// C program to avoid structure
// padding using pragma pack
#include <stdio.h>
  
// To force compiler to use 1 byte packaging
#pragma pack(1)
struct s {
    int i;
    char ch;
    double d;
};
  
int main()
{
    struct s A;
    printf("Size of A is: %ld", sizeof(A));
}

chevron_right


Output:

Size of A is: 13

Program-2: Using attribute

filter_none

edit
close

play_arrow

link
brightness_4
code

// C program to avoid structure
// padding using attribute
#include <stdio.h>
  
struct s {
    int i;
    char ch;
    double d;
} __attribute__((packed)); 
// Attribute informing compiler to pack all members
  
int main()
{
    struct s A;
    printf("Size of A is: %ld", sizeof(A));
}

chevron_right


Output:

Size of A is: 13


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.