From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Bug in GNAT? - Max_size_in_storage_elements insufficient Date: Wed, 19 Oct 2016 09:33:13 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <647636100.498533813.258228.laguest-archeia.com@nntp.aioe.org> NNTP-Posting-Host: vZYCW951TbFitc4GdEwQJg.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:32129 Date: 2016-10-19T09:33:13+02:00 List-Id: On 19/10/2016 03:39, Luke A. Guest wrote: > Dmitry A. Kazakov wrote: > >>> Well, then it's at least a bug in [Barnes] because there's an example >>> like the above ones just with a simpler type. But I still think the idea >>> here is/was to provide enough space for N items of some type. >> >> I am not sure if that were technically possible. Considering an >> implementation of, for example, a marked-margins pool, the penalty to >> have a guarantee would be extremely high. > > Surely that's what a static language can supply, the actual amount of space > required? In the mentioned above method you allocate a "margin" in front and in the end of each block. The margin contains an indicator if the block is free and the block size. When a block is freed the margins of adjacent blocks are inspected and the block is merged with its free neighbors. The memory overhead depends on the number of blocks, which in turn depends on the number of allocated objects and on how their blocks are distributed. In the worst case scenario you have a gap between each two allocated blocks. Which gives 2 * (2*N - 1) - 2 margins to keep in the pool. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de