Date: 2000-12-04 10:22:14
> [Peter Dimov]
> In some cases I have felt the need to define an std::vector<float> that
> aligns their elements on, say, 128-bit boundaries (the Intel SSE, AMD
> extensions like their floats aligned.) Is it possible to pass a stricter
> alignment requirement to pool_alloc?
No. There is no obvious way to allow this in pool. Pool will use operator
new for arrays of char; this is supposed to guarantee alignment.
I say "supposed to", because (according to "More C/C++ Memory Management
Benchmarks", by Ron Burk, in April 1997 issue of "Windows Developer's
Journal"), several popular Windows compilers do not return the best-aligned
data (note that on the Intel platform, misaligned data is not fatal; it is
only a speed penalty).
The table below shows the alignment guarantees for the compilers compared in
the article. On each compiler, float is 4-byte and double is 8-byte, so
slowdowns occur when only 4-byte alignment is provided and doubles/long
doubles are used:
Symantic C++ v7.2 4-byte alignment
Borland C++ v5.1 4-byte alignment
Visual C++ v4.2 16-byte alignment if requested size is <=
480 bytes; otherwise 4-byte alignment (i.e., large arrays of doubles may be
Watcom C++ v10.6 8-byte alignment
Pool itself passes off the alignment issues to operator new. Thus, it
should be possible to tackle alignment issues by overloading operator new,
if you know your compiler doesn't provide proper alignment.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk