The PROLIB utility and the AVM use 64-bit offsets when accessing procedure library files, so in theory they can be very large. 64-bit addressing allows creation of files larger than 4GB.
When using memory-mapped libraries with a 32-bit AVM, OpenEdge is limited by the amount of contiguous addressable memory available. Since a memory-mapped file takes up memory space just as if a block of memory was allocated, very large libraries cannot be memory mapped on a 32-bit platform.
For example, when trying to memory map a 1GB procedure library, there has to be 1GB of contiguous memory available, which is unlikely. Mapping several smaller procedure libraries is more likely to be successful. These considerations also exist on 64-bit platforms but there is so much address space available on 64-bit platforms that it’s unlikely this problem will occur.
When using memory mapped libraries in 32-bit, OpenEdge competes with database shared memory segments when in self-service mode (i.e. no -H -S -N), which will have to fit into the same address space and the chances are good that they will not fit into the same address space.
In such a case choose from one of the below options:
- Switch to a 64-bit release
- Break up the procedure library into smaller chunks.
- Reduce the settings for database configuration parameters to use less shared memory
- Do not use self-service database connections. (this option is likely to impact performance negatively)