All pastes #1921485 Raw Edit

Size and alignment test

public cpp v1 · immutable
#1921485 ·published 2010-08-20 17:00 UTC
rendered paste body
// Compiled with MSVC 10 using "cl /W4 alignment.cpp"// this program gives on a x86-64://// char             (size  1) aligned as 1// short            (size  2) aligned as 2// int              (size  4) aligned as 4// long long int    (size  8) aligned as 8// float            (size  4) aligned as 4// double           (size  8) aligned as 8// test1            (size 24) aligned as 8// test2            (size 16) aligned as 8// test3            (size  3) aligned as 1//#include <cstdio>#include <type_traits>#define PRINT_ALIGNMENT(t) print_alignment<t>(#t)template <typename T>void print_alignment(const char *name){	std::size_t a = std::alignment_of<T>::value;	printf("% -16s (size %2d) aligned as %d\n", name, sizeof(T), a);}struct test1{	char c1;	double d1;	char c2;};// Same as test1 but will most probably// take up less space due to more efficient// layout.struct test2{	double d1;	char c1;	char c2;};// Demonstrates together with test1// that structures align to the // member with the biggest alignment// requirement.struct test3{	char c1;	char c2;	char c3;};int main(int argc, char *argv[]){	PRINT_ALIGNMENT(char);	PRINT_ALIGNMENT(short);	PRINT_ALIGNMENT(int);	PRINT_ALIGNMENT(long long int);	PRINT_ALIGNMENT(float);	PRINT_ALIGNMENT(double);	PRINT_ALIGNMENT(test1);	PRINT_ALIGNMENT(test2);	PRINT_ALIGNMENT(test3);}