Boost logo

Boost :

Subject: Re: [boost] [optional] memory use for optional refs and ptrs
From: Larry Evans (cppljevans_at_[hidden])
Date: 2010-10-11 07:16:27


On 10/07/10 07:31, Rutger ter Borg wrote:
> On 2010-10-07 13:37, Larry Evans wrote:
>
>> [snip]
>>
>> A more complete facility use is here:
>>
>>
>> https://svn.boost.org/trac/boost/browser/sandbox/variadic_templates/libs/composite_storage/sandbox/layout_all.cpp
>>
[snip]
>> which shows the padding after the char is 3 in order
>> to make the alignment of the int at 4.
>>
>> HTH.
>>
>> -Larry
>
> Thanks,
>

You're welcome.

The reusable part of the code has been refactored into:

  http://svn.boost.org/svn/boost/sandbox/variadic_templates
    /boost/composite_storage/utility
    /show_layout_all_of_aligned.hpp

so that it on different struct's rather than just the struct's
in the current example driver.

The output produced on the example struct's in:

  https://svn.boost.org/trac/boost/browser/sandbox/variadic_templates
    /libs/composite_storage/sandbox/layout_all.1.cpp

is now in tabular format:

A_type
===========
***components***
----------------
num size align sum_size
  1 4 4 4
  2 8 8 12
  3 8 8 20
  4 8 8 28
***composite***
---------------
num size align pad sum_pad offset
  5 32 8 0 0 _
  4 32 8 0 0 24
  3 24 8 0 0 16
  2 16 8 4 4 8
  1 4 4 0 4 0
  0 0 1 _ _ _
A_bools_type
===========
***components***
----------------
num size align sum_size
  1 4 4 4
  2 8 8 12
  3 8 8 20
  4 8 8 28
  5 1 1 29
  6 1 1 30
  7 1 1 31
  8 1 1 32
***composite***
---------------
num size align pad sum_pad offset
  9 40 8 4 4 _
  8 36 8 0 4 35
  7 35 8 0 4 34
  6 34 8 0 4 33
  5 33 8 0 4 32
  4 32 8 0 4 24
  3 24 8 0 4 16
  2 16 8 4 8 8
  1 4 4 0 8 0
  0 0 1 _ _ _
bools_A_type
===========
***components***
----------------
num size align sum_size
  1 1 1 1
  2 1 1 2
  3 1 1 3
  4 1 1 4
  5 4 4 8
  6 8 8 16
  7 8 8 24
  8 8 8 32
***composite***
---------------
num size align pad sum_pad offset
  9 32 8 0 0 _
  8 32 8 0 0 24
  7 24 8 0 0 16
  6 16 8 0 0 8
  5 8 4 0 0 4
  4 4 1 0 0 3
  3 3 1 0 0 2
  2 2 1 0 0 1
  1 1 1 0 0 0
  0 0 1 _ _ _

which shows the padding between individual
fields and the sum of the padding. This shows
why putting the bools first (bools_A_type)
saves space. As mentioned before the 4 bools
are placed in the padding present in the
padding required by A_type; hence,
sizeof(A_type) == sizeof(bools_A_type).

Hope the tabular output makes it easier
to see the reason for space usage.

-Larry


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk