From: Robert A Duff on 10 Apr 2007 17:42 Stefan Bellon <sbellon(a)sbellon.de> writes: > Martin Krischik wrote: > >> First we need to know which platform you are using (compiler/OS). > > GNAT on GNU/Linux, Windows and Solaris, where the memory allocation > should work well on all three of them (but using separates or package > Naming in a project file to supply different algorithms for the > allocation strategy is no problem). You can probably use storage pool code that is entirely portable to these three systems. If you need to use OS-specific things like mmap and VirtualAlloc, you can isolate those parts, but in your case, it's probably not necessary. >> Then: how a storrage pool get's it memory is up to the pool designer. > >> In your case you could allocate a large chuck of memory strait from >> the OS and then sub-allocate it using an algorithm optimised for your >> needs. > > When using storage pools, can the storage pools be dynamically resized, > or is a storage pool, once created, fixed in its size? User-defined storage pools are entirely programmable. You write the code. You make it do whatever you like. If you want dynamically-resizable pools, then write the Allocate procedure to dynamically resize when needed. >... The latter would > rule out using storage pools since we do not know in advance how many > data we need to store, just the "Item_Type" is known when instantiating > the data structure, so it's size is known (provided we can trust the > 'Size, 'Object_Size, and 'Component_Size attributes). You need to look up the 'Max_Size_In_Storage_Elements attribute, which is more relevant to storage pools. If your types are not unconstrained arrays or discriminated records, then the "Max_" size is probably the only size. - Bob |