|
|
@@ -67,7 +67,9 @@ public:
|
|
|
typedef pkpy::shared_ptr<Function> _Func;
|
|
|
typedef std::variant<PyVar,_Int,_Float,bool,_Str,PyVarList,_CppFunc,_Func,pkpy::shared_ptr<_Iterator>,_BoundedMethod,_Range,_Slice,_Pointer> _Value;
|
|
|
|
|
|
-const int _SIZEOF_VALUE = sizeof(_Value);
|
|
|
+const int VALUE_SIZE = sizeof(_Value);
|
|
|
+
|
|
|
+static std::vector<void*> _objPool;
|
|
|
|
|
|
struct PyObject {
|
|
|
PyVarDict attribs;
|
|
|
@@ -95,4 +97,18 @@ struct PyObject {
|
|
|
|
|
|
PyObject(const _Value& val): _native(val) {}
|
|
|
PyObject(_Value&& val): _native(std::move(val)) {}
|
|
|
-};
|
|
|
+
|
|
|
+ void* operator new(size_t size){
|
|
|
+ if(_objPool.empty()){
|
|
|
+ return ::operator new(size);
|
|
|
+ }else{
|
|
|
+ void* ptr = _objPool.back();
|
|
|
+ _objPool.pop_back();
|
|
|
+ return ptr;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void operator delete(void* ptr){
|
|
|
+ _objPool.push_back(ptr);
|
|
|
+ }
|
|
|
+};
|