×

How to Avoid Structure Padding in C

Generally, when an object of some structure type is declared, some contiguous memory will be allocated in block form, which will be allocated to structure members. To understand structure padding we need to get an idea of how memory is allocated to structure variable.

Syntax Example

struct example
{
char x;
char y;
int z;
};


Memory Allocation in Structure

If we try to calculate the size, then we say it is 6 bytes why because we have two char values and one int value which is 4 bytes, and the character is 1 byte each, so finally, the memory allocated is 6 bytes, but we are wrong it is not 6 bytes.

This is because there is a concept called "Structure padding."

Structure padding

The basic thing is processor does not read one byte at a time from memory. It reads one word at a time.

For example, if we have a 32-bit processor, it can access 4 bytes at a time means 4 bytes at a time. A 64-bit processor can access 8 bytes simultaneously, meaning the word size is 8.

The memory looks like this.

How To Avoid Structure Padding In C

Problem

Well, in one CPU cycle, one word can be accessed, if we consider a 32-bit processor here,4 bytes can be accessed means character x, character y, and two bytes of int can be accessed here at a time. Here, we have no problem with char a and char b. Still, whenever we want the value stored in "z," we need two cycles to execute it completely, whereas, in the first cycle, only the first two parts are accessed. In the second cycle, the last two bytes are executed means here simply CPU cycles are wasted unnecessarily. Because of this problem, the concept of padding came into the picture.

Structure padding

To align the facts in reminiscence, one or extra empty bytes (addresses) are inserted (or left empty) among reminiscence addresses which might be allotted for different shape contributors even as reminiscence allocation. This idea is known as shape padding.

The architecture of a laptop processor is any such manner that it could examine one word (four-byte in 32-bit processor) from reminiscence at a time.

To employ this gain of processor, facts are usually aligned as a four-byte package deal which ends up in empty insert addresses among different member addresses.

Because of this shape padding idea in C, the shape's length is usually no longer identified as what we think.

We can save the number of cycles by using the concept called "padding".

Here we create an empty room or space as the variable "z" is overlapping between two CPU cycles. We add space.

It adds 2 bytes empty bytes.

Total=1 byte+1 byte+2 bytes+4 bytes=8 bytes.

Memory Allocation Example

If we change the order like char, int and char then it occupies12 bytes. Check the below image for the memory allocation idea.

How To Avoid Structure Padding In C

Structure Padding In C

#include<stdio.h>
struct example
{
char x;
char y;
int z;
};
int main()
{
struct example e;
printf("The size is %d",sizeof(e));
}

Output:

How To Avoid Structure Padding In C

Here the allocation will be like this. The space is added automatically. Here 4 bytes will be accessed.

How To Avoid Structure Padding In C

First CPU cycle:

char x will be accessed

Second CPU cycle:

int y will be accessed

Third CPU cycle:

char z will be accessed

So, the total size will be 12 bytes for 32-bit architecture.

Pragma

When we use structure padding, the CPU utilization is good, and we don't waste any extra cycles, but memory is wasted here. So, to avoid this structure padding and save memory or to stick with original memory, we need to use "pragma".

#include <stdio.h>
// Here, simply, we are forcing the compiler to use 1-byte packing
#pragma pack(1)
struct example {
char x;
char y;
int z;


};
  
int main()
{
 struct example e;
printf("The size is %d",sizeof(e));
}








Output:

How To Avoid Structure Padding In C

Here the size is 6 bytes only instead of 8 bytes as we used pragma concept.

Advantages of Structure Padding

Padding will increase the processor's overall performance on the memory penalty, in shape, or union records contributors aligned according to the dimensions of the best bytes member to save you the loss or penalty of overall performance.

Disadvantages of structure padding

1. It is slightly inefficient

2. The space will be wasted here. Sometimes memory usage plays a key role and here it is used unnecessarily.

3. It won't be binary, and wire compatibility is more.


Related Topics

C program to find factorial of a number using Recursion

What does the term "Factorial of a Number" mean? In mathematics, factorial is the product of all positive integers that are less than or equal to a certain positive integer, and...

2 minutes read.

Ftell() Function in C

Ftell(): In File Handling we have some special functions like Ftell(), Fseek(), rewind() etc.. while you are randomly accessing the file these functions play very important role and these functions...

3 minutes read.

getc() function in C

Getc is one of the file handling technique in C. The Getc() is a C library function gets the next character or new characters  from the specific stream and supports...

4 minutes read.

How to initialize array to zero in C

In this article, you will learn how to initialise an array to 0 in C In C, an array is declared as: char ZEROARRAY[2022]; The global scope changes at runtime to all zeros....

3 minutes read.

Array Of Structures in C

The C programming language allows us to store multiple elements of the same type in arrays. We can use strings to store multiple elements of a character data type. Still,...

4 minutes read.

getch() function in C

getch() is a pre-define or built-in function present in the conio.h library. It returns the given character immediately without waiting for the enter key to be entered. By using getch()...

3 minutes read.

How to delete a file in C

A file is a group of data kept on a secondary device, such as a hard disc. It is typically utilized as a real-world application with a lot of data. These...

3 minutes read.

Runtime vs compile time in C

In the C programming language, the often used terms in every step consist of compile time and runtime. The compile time is referred to the source code that will be...

4 minutes read.

Sizeof in C

A pointer in C is defined as a variable that stores the information of the address of another variable. A pointer can be incremented or decremented, which means we can...

4 minutes read.

Errors in C

Errors in C Errors are nothing but problems or faults that pretty much occur in all the programming languages. Errors make the behavior of the program seem abnormal, and even the...

4 minutes read.

Types of Pointers in C

Pointers in C A pointer is a variable and this variable contains the address of another variable, i.e it’s a variable which has the address of another variable as its value....

4 minutes read.

Keywords in C

A keyword is a word that has a predetermined meaning. The C compiler knows the purposes of the keywords. The objectives of these keywords cannot be modified. Keywords are the...

9 minutes read.

Sum of N numbers in C using For loop

Before we move on the program of sum of N numbers, first we have to know about the For Loop statement. The syntax of ‘for’ loop in C programming language is...

3 minutes read.

gets() function in C

gets() is a pre-define or built-in function present in the stdio.h header file. stdio stands for standard input and output. gets() function is used to read a stream and store...

4 minutes read.

Operators in C

An operator is a special symbol that tells the compiler to perform specific mathematical or logical operations. It is the combination of constants and variables through expressions. Example: int c = a+b*5 Where,...

5 minutes read.

How to create a node in C?

A node is a small concept taken from the graph theory, or a node is a fundamental unit of a data structure, like a tree data structure. Every graph contains...

3 minutes read.

Beep() function in C

Introduction: Beep is a function which is used in C programming language. The beep function uses to make a beep sound. In the C language, when we want to generate...

3 minutes read.

Typecast vs. typedef in C

Typecast vs. typedef in C Typecast In the C programming language, converting the data type from one form to another is known as type casting or the type conversion. It is a...

5 minutes read.

Data Types in C

Data type is a very important concept in C programming language. Simply, “A data type is the classification of data values that a data item can have.” We need to...

11 minutes read.

Quick sort in C

Quick-sort, in the same way, like a merge sort, follows the principle of the divide and conquer algorithm. It then picks an element as pivot and partitions, and the given...

4 minutes read.