blueloveTH 1 rok temu
rodzic
commit
48bd3e113e
3 zmienionych plików z 18 dodań i 10 usunięć
  1. 2 0
      include/pocketpy/memory.h
  2. 15 10
      src/memory.cpp
  3. 1 0
      src/vm.cpp

+ 2 - 0
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;
 

+ 15 - 10
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 init_memory_pools_if_needed(){
+    if(pool64 == nullptr) pool64 = new MemoryPool<64>();
+    if(pool128 == nullptr) pool128 = new MemoryPool<128>();
+}
+
+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* 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();
+    pool64->shrink_to_fit();
+    pool128->shrink_to_fit();
 }
 
-std::string pool64_info() noexcept { return pool64.info(); }
-std::string pool128_info() noexcept { return pool128.info(); }
+std::string pool64_info() noexcept { return pool64->info(); }
+std::string pool128_info() noexcept { return pool128->info(); }
 
 }

+ 1 - 0
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); };