read write benchmark __attribute__(aligned(16)) char buf[1000]; /* test code(–{“–‚Íasm‚Å) */ template void read(char *buf, int n, int size, int offset) { for (int i = 0; i < n; i++) { T tmp = *reinterpret_cast<*T>(&buf[i * size + offset]); } } read size = 16 ----------------------------------------------------------------------------- offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 long double 1.7 1.7 1.7 1.7 1.7 1.7 1.7 5.8 1.7 5.1 5.1 5.1 5.1 5.1 5.1 5.1 double 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 5.0 5.0 5.0 5.0 5.0 5.0 5.0 float 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 5.0 5.0 5.0 int 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4.4 4.4 4.4 short 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 5.4 char 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- size = 8 offset +0 +1 +2 +3 +4 +5 +6 +7 double 0.5 2.2 2.2 2.2 2.2 2.2 2.2 2.2 float 0.5 0.5 0.5 0.5 0.5 2.2 2.2 2.2 int 0.6 0.6 0.6 0.6 0.6 1.9 1.9 1.9 short 0.9 0.9 0.9 0.9 0.9 0.9 0.9 2.3 char 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- size = 4 offset +0 +1 +2 +3 int 0.4 0.5 0.5 0.5 short 0.4 0.4 0.4 0.8 char 0.4 0.4 0.4 0.4 ----------------------------------------------------------------------------- write size = 16 ----------------------------------------------------------------------------- offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 long double 2.1 2.1 2.1 2.1 2.1 2.1 2.1 9.1 2.1 5.0 5.0 5.0 5.0 5.0 5.0 5.0 double 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 4.5 4.5 4.5 4.5 4.5 4.5 4.5 float 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 4.5 4.5 4.5 int 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 4.7 4.7 4.7 short 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 4.7 char 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- size = 8 offset +0 +1 +2 +3 +4 +5 +6 +7 double 1.6 3.4 3.4 3.4 3.4 3.4 3.4 3.4 float 1.6 1.6 1.6 1.6 1.6 3.4 3.4 3.4 int 0.8 0.8 0.8 0.8 0.8 2.9 2.9 2.9 short 0.8 0.8 0.8 0.8 0.8 0.8 0.8 2.9 char 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- size = 4 offset +0 +1 +2 +3 float 1.7 2.7 2.7 2.7 int 0.8 1.6 1.6 1.6 short 0.8 0.8 0.8 1.6 char 0.8 0.8 0.8 0.8 ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- size = 2 offset +0 +1 short 0.7 1.3 char 0.8 0.8 -----------------------------------------------------------------------------