Feature
Currently, each memory reserves a 4G virtual address space in the pooling allocator. But page-size-1 memories use bounds check, it doesn't need the guarded virtual reservation. We need a separate pool for page-size-1 memories, so that we can have a higher limit for max_memories_per_component, and don't run out of virtual address space.
Implementation
We can set two new limits: page_size_1_memory_max_size and max_page_size_1_memories_per_component. Use Memory::new_dynamic for allocating the page-size-1 memory, and don't put the allocation_index into the MemoryPoll.
Alternatives
We can create a dedicated memory pool for page-size-1 memory, something similar to TablePool. But we need to reserve instance_count * page_size_1_memory_max_size * max_page_size_1_memories_per_component virtual space. With the new_dynamic/malloc approach, we only consume virtual space for the live ones.
Feature
Currently, each memory reserves a 4G virtual address space in the pooling allocator. But page-size-1 memories use bounds check, it doesn't need the guarded virtual reservation. We need a separate pool for page-size-1 memories, so that we can have a higher limit for
max_memories_per_component, and don't run out of virtual address space.Implementation
We can set two new limits:
page_size_1_memory_max_sizeandmax_page_size_1_memories_per_component. UseMemory::new_dynamicfor allocating the page-size-1 memory, and don't put theallocation_indexinto theMemoryPoll.Alternatives
We can create a dedicated memory pool for page-size-1 memory, something similar to
TablePool. But we need to reserveinstance_count * page_size_1_memory_max_size * max_page_size_1_memories_per_componentvirtual space. With thenew_dynamic/mallocapproach, we only consume virtual space for the live ones.