Skip to content

[REGRESSION] Pool size is extended on each allocation #54

@orgads

Description

@orgads

Reported in Boost mailing list: https://lists.boost.org/Archives/boost/2023/06/254750.php

951ca57 changed malloc_need_resize() to use set_next_size(), which
sets start_size in addition to setting next_size. this causes repeated use
of purge_memory() to allocate 2x size after every use. an illustration:

#include <boost/pool/pool.hpp>
int main()
{
  boost::pool pool(8);
  for(int i = 0; i < 10; i++) {
    printf("%d %ld\n", i, pool.get_next_size());
    pool.purge_memory();
    void *ptr = pool.malloc();
    (void)ptr;
  }
}

before the commit the output is:

0 32
1 64
2 64
3 64
4 64
5 64
6 64
7 64
8 64
9 64

after the commit, the output is:

0 32
1 64
2 128
3 256
4 512
5 1024
6 2048
7 4096
8 8192
9 16384

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions