Bryan Green wrote:
Hello, I've discovered a situation where using boost::array results in a 2-fold performance degradation over other array types, including C arrays, tr1::array, and a simple handwritten array class. While the tr1::array performs well, I was suprised to find that it pads the array, so sizeof(tr1::array<3,float>) == sizeof(tr1::array<4,float>). Is that a requirement of tr1::array?
No, that will be an effect of the compiler's structure alignment rules. BTW tr1::array and boost::array are basically the same thing, so I'm surprised that there's any difference at all.
Anyway, the performance problem can be seen using Intel C++ (v9.1) on the Itanium platform, using '-O3' optimization.
I'm forced to take boost::array out of my computation's inner loop. Is this a previously known issue? Any ideas why this performance discrepancy might exist?
Can you share a test case? As others have already noted, defining NDEBUG is likely to have quite an effect as well. HTH, John.