Fernando Cacciola wrote:

[...]

> It seems there is something one of us don't understand...
> optional<T>::m_storage has nothing to do with alignment to 'int'
> unless T happens to be aligned just like 'int', which won't always be
> the case, so I don't
> see the relation between optional's storage and the correlation
> bool<->int you
> make above.
> For example, the storage for optional<long double> won't be aligned
> to a double-word boundary like 'int' does on 32-bit platforms, for
> instance.

Yes it does, because m_storage is preceded by m_initialized which is of type
bool in optional<>.  m_storage will thus follow bool alignment requirement.

[...]

>> This means that it *must* be constructed sooner or later?
> Some object must be constructed sooner or later within the aligned
> storage, yes,
> but that's not the job of aligned_storage itself, just as it is not
> the job for
> operator new.

Yes, it the users' responsability to do so.

[...]

> No, it isn't.
> But anyway, remember that bit-allocation _necesarily_
> optimizes size at the expense of speed.

It's true.  Imagine we have some partial specialization of array<bool,
size_t>:

template <unsigned int I>
    struct array<bool, I>
    {
        char value_[I >> 3];

        // Read-only version:
        bool operator [] (unsigned int a_index) const
        {
            return value_[a_index >> 3] & (1u << (a_index % 8));
        }
    };

I could have made a mistake in my example, but operator [] in assembler code
will be quite fast (and, shl, ...) when it comes to logical operations.  I
don't think it will be twice slower.

> So, what are you trying to optimize with this bool array?
> and most importantly, why do you feel that such optimization is
> needed? Consider that gaining storage, say 31 bits, per optional<>
> will incurr in
> a significant overhead, so in order to think that the gain is needed
> you need to weight size/speed benefits.
> This sort of things are typically considered only afer some benchmarks
> shown the need for the optimization.

Even tough array<bool> is not optimized, the boolean values will follow each
other and will not waste any space between themselves.



Philippe A. Bouchard




_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to