X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/c1d3e52e58e86c49f9d04e06ae8e0ece4b98250c..c8a2a786eb3f1cda8780b348f27e2c8240621045:/Pooling.hpp diff --git a/Pooling.hpp b/Pooling.hpp index 1c1f219..c03dd1d 100644 --- a/Pooling.hpp +++ b/Pooling.hpp @@ -43,6 +43,7 @@ class CYPool { private: uint8_t *data_; size_t size_; + size_t next_; struct Cleaner { Cleaner *next_; @@ -70,9 +71,10 @@ class CYPool { CYPool(const CYPool &); public: - CYPool() : + CYPool(size_t next = 64) : data_(NULL), size_(0), + next_(next), cleaner_(NULL) { } @@ -90,8 +92,8 @@ class CYPool { size = align(size); if (size > size_) { - // XXX: is this an optimal malloc size? - size_ = std::max(size, size + align(sizeof(Cleaner))); + size_ = std::max(next_, size + align(sizeof(Cleaner))); + next_ *= 2; data_ = reinterpret_cast(::malloc(size_)); atexit(free, data_); _assert(size <= size_); @@ -115,12 +117,12 @@ class CYPool { return copy; } - char *strndup(const char *data, size_t size) const { + char *strndup(const char *data, size_t size) { return strmemdup(data, strnlen(data, size)); } - char *strmemdup(const char *data, size_t size) const { - char *copy(new char[size + 1]); + char *strmemdup(const char *data, size_t size) { + char *copy(malloc(size + 1)); memcpy(copy, data, size); copy[size] = '\0'; return copy;