Padding in C programming and how it matters.

By Jared Atandi

Padding is important in C programming for a number of reasons. First, when data is aligned on natural boundaries, it can be accessed more efficiently. Second, aligned data can be packed together to form larger data types, which can improve performance on some processors. Finally, some data types have specific alignment requirements that must be met in order for the data to be used correctly.

Padding can also be used to achieve other goals, such as ensuring that a structure or array is a multiple of a certain size, or that a certain number of bits is set to zero. However, the most common reason for padding in C is to improve performance.

Data alignment means that data is arranged in memory so that it can be accessed more efficiently. When data is aligned on natural boundaries, the processor can fetch it more quickly. For example, if data is aligned on a 4-byte boundary, the processor can fetch it in a single operation, rather than having to fetch two 2-byte values and then combine them.

Alignment can also improve performance on some processors by allowing data to be packed together to form larger data types. For example, on a 32-bit processor, two 16-bit values can be packed together to form a 32-bit value, which can be processed in a single operation.

Some data types have specific alignment requirements that must be met in order for the data to be used correctly. For example, the x86 processor requires that certain data types, such as doubles and longs, be aligned on 4-byte boundaries. If these data types are not aligned properly, the processor will generate an error.

Padding can also be used to ensure that a structure or array is a multiple of a certain size. For example, if an array is declared as follows:

int array[100];

The compiler will typically allocate 4 bytes for each element in the array, for a total of 400 bytes. However, if the array is declared as follows:

int array[100] __attribute__((aligned(16)));

The compiler will allocate 16 bytes for each element in the array, for a total of 1600 bytes. This can be useful if the array is going to be used for purposes such as SIMD (Single Instruction Multiple Data) processing, where data is processed in parallel using SIMD instructions.

Padding can also be used to ensure that a certain number of bits is set to zero. For example, the following structure:

struct foo 
{
 unsigned int a : 4; unsigned int b : 4; 
 unsigned int c : 4; unsigned int d : 4;
};

Will be padded so that the total size of the structure is 8 bytes, and the value of the padding bits will be zero.

In summary, padding is important in C programming for a number of reasons. Padding can improve performance by aligning data on natural boundaries and by packing data together to form larger data types. Padding can also be used to ensure that a structure or array is a multiple of a certain size, or that a certain number of bits is set to zero.