diff --git a/include/pocketpy/memory.h b/include/pocketpy/memory.h index 14327ae4..4b1fd0e2 100644 --- a/include/pocketpy/memory.h +++ b/include/pocketpy/memory.h @@ -4,6 +4,8 @@ namespace pkpy{ +void init_memory_pools_if_needed(); + void* pool64_alloc(size_t) noexcept; void pool64_dealloc(void*) noexcept; diff --git a/src/memory.cpp b/src/memory.cpp index 2926b944..522c1738 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -267,21 +267,26 @@ struct MemoryPool{ } }; -static MemoryPool<64> pool64; -static MemoryPool<128> pool128; +static MemoryPool<64>* pool64; +static MemoryPool<128>* pool128; -void* pool64_alloc(size_t size) noexcept { return pool64.alloc(size); } -void pool64_dealloc(void* p) noexcept { pool64.dealloc(p); } - -void* pool128_alloc(size_t size) noexcept { return pool128.alloc(size); } -void pool128_dealloc(void* p) noexcept { pool128.dealloc(p); } - -void pools_shrink_to_fit() noexcept { - pool64.shrink_to_fit(); - pool128.shrink_to_fit(); +void init_memory_pools_if_needed(){ + if(pool64 == nullptr) pool64 = new MemoryPool<64>(); + if(pool128 == nullptr) pool128 = new MemoryPool<128>(); } -std::string pool64_info() noexcept { return pool64.info(); } -std::string pool128_info() noexcept { return pool128.info(); } +void* pool64_alloc(size_t size) noexcept { return pool64->alloc(size); } +void pool64_dealloc(void* p) noexcept { pool64->dealloc(p); } + +void* pool128_alloc(size_t size) noexcept { return pool128->alloc(size); } +void pool128_dealloc(void* p) noexcept { pool128->dealloc(p); } + +void pools_shrink_to_fit() noexcept { + pool64->shrink_to_fit(); + pool128->shrink_to_fit(); +} + +std::string pool64_info() noexcept { return pool64->info(); } +std::string pool128_info() noexcept { return pool128->info(); } } \ No newline at end of file diff --git a/src/vm.cpp b/src/vm.cpp index e1305fa7..ea5ea5d8 100644 --- a/src/vm.cpp +++ b/src/vm.cpp @@ -73,6 +73,7 @@ namespace pkpy{ }; VM::VM(bool enable_os) : heap(this), enable_os(enable_os) { + init_memory_pools_if_needed(); this->vm = this; this->_c.error = nullptr; _stdout = [](const char* buf, int size) { std::cout.write(buf, size); };