How to Calculate the Alignment in C++
How to Calculate the Alignment in C++
Use the following class to help calculate the alignment in C++:
template<typename T>
class Alignment
{
struct Align
{
char align;
T t;
};
public:
int alignment()
{
return sizeof(Align) - sizeof(T);
}
};
Below are two examples that use the Alignment class. The first one is for the char data type; the second one is for the iostream class from the standard Input/Output streams library:
Alignment<char> char_type;
std::cout << char_type.alignment() << std::endl;
Alignment<iostream&g;t iostream_class;
std::cout << iostream_class.alignment() << std::endl;
The alignment requirement for a data object is hardware- and compiler-specific parameter. Even on the same machine and with the same compiler, the alignment for the same type can be different depending on compiler-specific options. For example, the following compiler command:
#pragma pack(2)
will result in many compilers to use at most two-byte alignment for the data that follow the directive (please note that pragma directives cannot increase alignment for a data object).
How to Calculate the Alignment in C++
Use the following class to help calculate the alignment in C++:
template<typename T>
class Alignment
{
struct Align
{
char align;
T t;
};
public:
int alignment()
{
return sizeof(Align) - sizeof(T);
}
};
Below are two examples that use the Alignment class. The first one is for the char data type; the second one is for the iostream class from the standard Input/Output streams library:
Alignment<char> char_type;
std::cout << char_type.alignment() << std::endl;
Alignment<iostream&g;t iostream_class;
std::cout << iostream_class.alignment() << std::endl;
The alignment requirement for a data object is hardware- and compiler-specific parameter. Even on the same machine and with the same compiler, the alignment for the same type can be different depending on compiler-specific options. For example, the following compiler command:
#pragma pack(2)
will result in many compilers to use at most two-byte alignment for the data that follow the directive (please note that pragma directives cannot increase alignment for a data object).
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.