Groups | Search | Server Info | Login | Register
Groups > comp.lang.ada > #49509
| Newsgroups | comp.lang.ada |
|---|---|
| Date | 2021-09-13 18:04 -0700 |
| References | <e3c5c553-4a7f-408a-aaa7-60ec0b70202dn@googlegroups.com> <shmnk1$lgf$1@franka.jacob-sparre.dk> |
| Message-ID | <036086ba-ea40-44cb-beb7-cded0f501cfbn@googlegroups.com> (permalink) |
| Subject | Re: Custom Storage Pool questions |
| From | Jere <jhb.chat@gmail.com> |
On Monday, September 13, 2021 at 1:29:39 AM UTC-4, Randy Brukardt wrote: > Not sure what you are expecting. There is no requirement that objects are > allocated contigiously. Indeed, Janus/Ada will call Allocate as many times > as needed for each object; for instance, unconstrained arrays are in two > parts (descriptor and data area). > No expectations. Just questions. I wasn't concerned with whether the allocated memory was contiguous or not, but whether an implementation is required to supply the correct size of memory needed to allocate an object or if it is allowed to pass a value to Size that is less than the amount of memory actually needed. For example, the blog there indicates the maintainer of the custom storage pool needs to account for First/Last indexes of an unconstrained array separately instead of assuming that value is included as part of the Size parameter's value. If the Size parameter doesn't require that it includes space for First/Last for unconstrained arrays or Prev/Next for controlled objects (assuming that is even the implementation picked of course), then I'm not seeing a way to write a custom storage pool that is portable because you need to account for each implementation's "hidden" values that are not represented in the Size parameter. For example if Janus calculated Size to have both the size of the array and the size of First and Last but GNAT didn't and my storage pool assumed the JANUS method, then if someone used my storage pool with GNAT then it would access memory from some other location potentially and erroneously. > The only thing that you can assume in a portable library is that you get > called the same number of times and sizes/alignment for Allocate and > Deallocate; there's no assumptions about size or alignment that you can > make. So to be clear, you cannot assume that Size and Alignment are appropriate for the actual object being allocated correct? Size could actually be less than the actual amount of memory needed and the alignment may only apply to part of the object being allocated, not the full object? Is that correct? I'm asking because that is what the blog suggests with the example it gave. > > If you want to build a pool around some specific allocated size, then if it > needs to be portable, (A) you have to calculate the allocated size, and (B) > you have to have a mechanism for what to do if some other size is requested. > (Allocate a whole block for smaller sizes, fall back to built-in heap for > too large is what I usually do). > Are there any good tricks to handle this? For example, if I design a storage pool around constructing a particular type of object, what is normally done to discourage another programmer from using the pool with an entirely different type? Maybe raise an exception if the size isn't exact? I'm not sure what else, unless maybe there is an Aspect/Attribute that can be set to ensure only a specific type of object can be constructed. HISTORY: > > > > "Jere" <> wrote in message > news:e3c5c553-4a7f-408a...@googlegroups.com... > >I was learning about making user defined storage pools when > > I came across an article that made me pause and wonder how > > portable storage pools actually can be. In particular, I assumed > > that the Size_In_Storage_Elements parameter in the Allocate > > operation actually indicated the total number of storage elements > > needed. > > > > procedure Allocate( > > Pool : in out Root_Storage_Pool; > > Storage_Address : out Address; > > Size_In_Storage_Elements : in Storage_Elements.Storage_Count; > > Alignment : in Storage_Elements.Storage_Count) is abstract; > > > > But after reading the following AdaCore article, my assumption is now > > called into question: > > https://blog.adacore.com/header-storage-pools > > > > In particular, the blog there advocates for separately counting for > > things like unconstrained array First/Last indices or the Prev/Next > > pointers used for Controlled objects. Normally I would have assumed > > that the Size_In_Storage_Elements parameter in Allocate would account > > for that, but the blog clearly shows that it doesn't > > > > So that seems to mean to make a storage pool, I have to make it > > compiler specific or else risk someone creating a type like an > > array and my allocation size and address values will be off. > > > > Is it intended not to be able to do portable Storage Pools or am > > I missing some Ada functionality that helps me out here. I > > scanned through the list of attributes but none seem to give > > any info about where the object's returned address is relative > > to the top of the memory actually allocated for the object. I saw > > the attribute Max_Size_In_Storage_Elements, but it doesn't seem > > to guarantee to include things like the array indices and it still > > doesn't solve the issue of knowing where the returned address > > needs to be relative to the top of allocated memory. > > > > I can easily use a generic to ensure that the types I care about > > are portably made by the pool, but I can't prevent someone from > > using my pool to create other objects that I hadn't accounted for. > > Unless there is a way to restrict a pool from allocating objects > > of other types?
Back to comp.lang.ada | Previous | Next — Previous in thread | Next in thread | Find similar
Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-12 17:53 -0700
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-13 00:29 -0500
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-13 18:04 -0700
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 19:06 -0500
Re: Custom Storage Pool questions Simon Wright <simon@pushface.org> - 2021-09-18 12:32 +0100
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-19 17:31 -0700
Re: Custom Storage Pool questions Niklas Holsti <niklas.holsti@tidorum.invalid> - 2021-09-20 09:34 +0300
Re: Custom Storage Pool questions Emmanuel Briot <briot.emmanuel@gmail.com> - 2021-09-19 23:48 -0700
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-20 09:35 +0200
Re: Custom Storage Pool questions Shark8 <onewingedshark@gmail.com> - 2021-09-20 09:59 -0700
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 19:50 -0500
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-21 16:08 -0700
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-27 23:42 -0500
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-10-02 16:19 -0700
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-10-03 10:52 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-10-13 20:26 -0500
Re: Custom Storage Pool questions "J-P. Rosen" <rosen@adalog.fr> - 2021-09-13 13:12 +0200
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-13 17:48 -0700
Re: Custom Storage Pool questions "J-P. Rosen" <rosen@adalog.fr> - 2021-09-14 08:08 +0200
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-14 17:39 -0700
Re: Custom Storage Pool questions Simon Wright <simon@pushface.org> - 2021-09-15 08:01 +0100
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-16 16:32 -0700
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 18:51 -0500
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-21 15:40 -0700
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-14 08:23 +0200
Re: Custom Storage Pool questions "J-P. Rosen" <rosen@adalog.fr> - 2021-09-14 08:42 +0200
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-14 09:00 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 18:58 -0500
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-14 17:21 -0700
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-15 08:54 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 18:48 -0500
Re: Custom Storage Pool questions Egil H H <ehh.public@gmail.com> - 2021-09-14 03:54 -0700
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-14 17:11 -0700
Re: Custom Storage Pool questions Simon Wright <simon@pushface.org> - 2021-09-15 17:43 +0100
Re: Custom Storage Pool questions Simon Wright <simon@pushface.org> - 2021-09-15 18:03 +0100
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-15 21:07 +0200
Re: Custom Storage Pool questions Simon Wright <simon@pushface.org> - 2021-09-15 21:40 +0100
Re: Custom Storage Pool questions Emmanuel Briot <briot.emmanuel@gmail.com> - 2021-09-16 00:12 -0700
Re: Custom Storage Pool questions Jere <jhb.chat@gmail.com> - 2021-09-16 16:21 -0700
Re: Custom Storage Pool questions Emmanuel Briot <briot.emmanuel@gmail.com> - 2021-09-17 00:08 -0700
Re: Custom Storage Pool questions Simon Wright <simon@pushface.org> - 2021-09-17 08:18 +0100
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-17 15:56 +0200
Re: Custom Storage Pool questions Simon Wright <simon@pushface.org> - 2021-09-17 20:46 +0100
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-17 22:39 +0200
Re: Custom Storage Pool questions Niklas Holsti <niklas.holsti@tidorum.invalid> - 2021-09-18 00:17 +0300
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-18 09:49 +0200
Re: Custom Storage Pool questions Niklas Holsti <niklas.holsti@tidorum.invalid> - 2021-09-18 12:03 +0300
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-18 12:22 +0200
Re: Custom Storage Pool questions Niklas Holsti <niklas.holsti@tidorum.invalid> - 2021-09-18 18:59 +0300
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-18 18:19 +0200
Re: Custom Storage Pool questions Niklas Holsti <niklas.holsti@tidorum.invalid> - 2021-09-19 13:36 +0300
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-19 13:41 +0200
Re: Custom Storage Pool questions Niklas Holsti <niklas.holsti@tidorum.invalid> - 2021-09-20 10:05 +0300
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-20 09:35 +0200
Re: Custom Storage Pool questions Niklas Holsti <niklas.holsti@tidorum.invalid> - 2021-09-20 11:08 +0300
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-20 10:28 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 19:45 -0500
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 19:40 -0500
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 19:30 -0500
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 19:37 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-21 08:28 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-27 23:38 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-28 09:00 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 19:26 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-21 08:51 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-27 23:31 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-28 08:56 +0200
Re: Custom Storage Pool questions Simon Wright <simon@pushface.org> - 2021-09-28 08:52 +0100
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-28 10:07 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-28 17:04 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-29 09:57 +0200
Re: Custom Storage Pool questions Shark8 <onewingedshark@gmail.com> - 2021-09-29 07:41 -0700
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-29 17:16 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-29 19:16 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-30 10:08 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-30 19:04 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-10-01 10:25 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-10-02 04:06 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-10-02 12:18 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-10-02 23:33 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-10-03 10:40 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-10-13 20:21 -0500
Re: Custom Storage Pool questions "philip...@gmail.com" <philip.munts@gmail.com> - 2021-10-13 20:12 -0700
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-10-14 09:31 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-10-14 19:36 -0500
Re: Custom Storage Pool questions Stephen Leake <stephen_leake@stephe-leake.org> - 2021-10-15 01:08 -0700
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-10-15 10:18 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-10-15 17:22 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-10-15 10:15 +0200
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-10-15 17:44 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-10-16 11:00 +0200
Re: Custom Storage Pool questions Simon Wright <simon@pushface.org> - 2021-10-16 15:32 +0100
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-10-16 17:06 +0200
Re: Custom Storage Pool questions Shark8 <onewingedshark@gmail.com> - 2021-10-18 07:23 -0700
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 19:19 -0500
Re: Custom Storage Pool questions "Randy Brukardt" <randy@rrsoftware.com> - 2021-09-20 19:18 -0500
Re: Custom Storage Pool questions "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2021-09-16 10:41 +0200
csiph-web