This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Types with power-of-two size in ggc-page.c extra_order_size_table[]


On Wed, Sep 16, 2009 at 12:39 AM, Oliver Kellogg
<oliver.kellogg@t-online.de> wrote:
> Hi,
>
> Looking at ggc-page.c:175ff.,
>
> static const size_t extra_order_size_table[] = {
> ?sizeof (struct var_ann_d),
> ?sizeof (struct tree_decl_non_common),
> ?sizeof (struct tree_field_decl),
> ?sizeof (struct tree_parm_decl),
> ?sizeof (struct tree_var_decl),
> ?sizeof (struct tree_list),
> ?sizeof (struct tree_ssa_name),
> ?sizeof (struct function),
> ?sizeof (struct basic_block_def),
> ?sizeof (bitmap_element),
> ?sizeof (bitmap_head),
> ?TREE_EXP_SIZE (2),
> ?RTL_SIZE (2), ? ? ? ? ? ? ? ? /* MEM, PLUS, etc. ?*/
> ?RTL_SIZE (9), ? ? ? ? ? ? ? ? /* INSN */
> };
>
> On my openSuSE-11.1 i686-pc-linux-gnu, sizeof (struct basic_block_def)
> is 64 and sizeof (bitmap_head) is 16.
> Why are these types entered into extra_order_size_table?

They likely changed in size and/or the 64bit host-wide-int variants are not
power-of-two sized.

>
> ggc-page.c (init_ggc):1567ff.
> ?for (order = HOST_BITS_PER_PTR; order < NUM_ORDERS; ++order)
> ? ?{
> ? ? ?int o;
> ? ? ?int i;
>
> ? ? ?i = OBJECT_SIZE (order);
> ? ? ?if (i >= NUM_SIZE_LOOKUP)
> ? ? ? ?continue;
>
> ? ? ?for (o = size_lookup[i]; o == size_lookup [i]; --i)
> ? ? ? ?size_lookup[i] = order;
> ? ?}
>
> At order 42, OBJECT_SIZE returns 16 (from extra_order_size_table[10])
> and size_lookup[16] down to [9] is changed to 42.
> That seems strange to me, given the documentation of size_lookup[],

I don't remember exactly but the last time I spent with the code it did
the right thing.  Giving more context might help to understand the problem
you are seeing.

Richard.

> /* This table provides a fast way to determine ceil(log_2(size)) for
> ? allocation requests. ?The minimum allocation size is eight bytes. ?*/
>
>
> Thanks,
>
> Oliver
>
>
>
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]