diff --git a/cpp11/define.hpp b/cpp11/define.hpp index b29eb600..0f09c3aa 100644 --- a/cpp11/define.hpp +++ b/cpp11/define.hpp @@ -121,7 +121,7 @@ struct define { void msgpack_object(msgpack::object* o, msgpack::zone* z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->malloc(sizeof(object)*sizeof...(Args))); + o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*sizeof...(Args))); o->via.array.size = sizeof...(Args); define_imp, sizeof...(Args)>::object(o, z, a); diff --git a/cpp11/tuple.hpp b/cpp11/tuple.hpp index 54724489..a747a759 100644 --- a/cpp11/tuple.hpp +++ b/cpp11/tuple.hpp @@ -189,7 +189,7 @@ inline void operator<< ( object::with_zone& o, type::tuple& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->malloc(sizeof(object)*sizeof...(Args))); + o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*sizeof...(Args))); o.via.array.size = sizeof...(Args); TupleToObjectWithZone::convert(o, v); } diff --git a/cpp11/zone.hpp b/cpp11/zone.hpp index 07fd678b..c86a3304 100644 --- a/cpp11/zone.hpp +++ b/cpp11/zone.hpp @@ -155,8 +155,8 @@ public: public: static zone* create(size_t chunk_size); static void destroy(zone* zone); - void* malloc(size_t size); - void* malloc_no_align(size_t size); + void* allocate_align(size_t size); + void* allocate_no_align(size_t size); void push_finalizer(void (*func)(void*), void* data); @@ -172,12 +172,12 @@ public: T* allocate(Args... args); private: - void undo_malloc(size_t size); + void undo_allocate(size_t size); template static void object_destructor(void* obj); - void* malloc_expand(size_t size); + void* allocate_expand(size_t size); }; inline zone* zone::create(size_t chunk_size) @@ -200,16 +200,16 @@ inline zone::zone(size_t chunk_size) noexcept:chunk_size_(chunk_size), chunk_lis { } -inline void* zone::malloc(size_t size) +inline void* zone::allocate_align(size_t size) { - return malloc_no_align( + return allocate_no_align( ((size)+((MSGPACK_ZONE_ALIGN)-1)) & ~((MSGPACK_ZONE_ALIGN)-1)); } -inline void* zone::malloc_no_align(size_t size) +inline void* zone::allocate_no_align(size_t size) { if(chunk_list_.free_ < size) { - return malloc_expand(size); + return allocate_expand(size); } char* ptr = chunk_list_.ptr_; @@ -219,7 +219,7 @@ inline void* zone::malloc_no_align(size_t size) return ptr; } -inline void* zone::malloc_expand(size_t size) +inline void* zone::allocate_expand(size_t size) { chunk_list* const cl = &chunk_list_; @@ -270,7 +270,7 @@ void zone::object_destructor(void* obj) reinterpret_cast(obj)->~T(); } -inline void zone::undo_malloc(size_t size) +inline void zone::undo_allocate(size_t size) { chunk_list_.ptr_ -= size; chunk_list_.free_ += size; @@ -280,18 +280,18 @@ inline void zone::undo_malloc(size_t size) template T* zone::allocate(Args... args) { - void* x = malloc(sizeof(T)); + void* x = allocate_align(sizeof(T)); try { finalizer_array_.push(&zone::object_destructor, x); } catch (...) { - undo_malloc(sizeof(T)); + undo_allocate(sizeof(T)); throw; } try { return new (x) T(args...); } catch (...) { --finalizer_array_.tail_; - undo_malloc(sizeof(T)); + undo_allocate(sizeof(T)); throw; } } diff --git a/src/msgpack/type/define.hpp.erb b/src/msgpack/type/define.hpp.erb index 8a234256..fc233969 100644 --- a/src/msgpack/type/define.hpp.erb +++ b/src/msgpack/type/define.hpp.erb @@ -118,7 +118,7 @@ struct define, A<%=j%><%}%>> { void msgpack_object(msgpack::object* o, msgpack::zone* z) const { o->type = type::ARRAY; - o->via.array.ptr = static_cast(z->malloc(sizeof(object)*<%=i+1%>)); + o->via.array.ptr = static_cast(z->allocate_align(sizeof(object)*<%=i+1%>)); o->via.array.size = <%=i+1%>; <%0.upto(i) {|j|%> o->via.array.ptr[<%=j%>] = object(a<%=j%>, z);<%}%> diff --git a/src/msgpack/type/deque.hpp b/src/msgpack/type/deque.hpp index b3895f70..be5ad8a4 100644 --- a/src/msgpack/type/deque.hpp +++ b/src/msgpack/type/deque.hpp @@ -57,7 +57,7 @@ inline void operator<< (object::with_zone& o, const std::deque& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->malloc(sizeof(object)*v.size())); + object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/src/msgpack/type/list.hpp b/src/msgpack/type/list.hpp index 03ae9d15..f3ac18ba 100644 --- a/src/msgpack/type/list.hpp +++ b/src/msgpack/type/list.hpp @@ -57,7 +57,7 @@ inline void operator<< (object::with_zone& o, const std::list& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->malloc(sizeof(object)*v.size())); + object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/src/msgpack/type/map.hpp b/src/msgpack/type/map.hpp index efbd5210..a4242b77 100644 --- a/src/msgpack/type/map.hpp +++ b/src/msgpack/type/map.hpp @@ -78,7 +78,7 @@ inline void operator<< (object::with_zone& o, const type::assoc_vector& v) o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->malloc(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); @@ -134,7 +134,7 @@ inline void operator<< (object::with_zone& o, const std::map& v) o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->malloc(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); @@ -184,7 +184,7 @@ inline void operator<< (object::with_zone& o, const std::multimap& v) o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->malloc(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); diff --git a/src/msgpack/type/pair.hpp b/src/msgpack/type/pair.hpp index 1b9611e4..266abc72 100644 --- a/src/msgpack/type/pair.hpp +++ b/src/msgpack/type/pair.hpp @@ -47,7 +47,7 @@ template inline void operator<< (object::with_zone& o, const std::pair& v) { o.type = type::ARRAY; - object* p = static_cast(o.zone->malloc(sizeof(object)*2)); + object* p = static_cast(o.zone->allocate_align(sizeof(object)*2)); o.via.array.ptr = p; o.via.array.size = 2; p[0] = object(v.first, o.zone); diff --git a/src/msgpack/type/set.hpp b/src/msgpack/type/set.hpp index 506732e4..cfb6e79a 100644 --- a/src/msgpack/type/set.hpp +++ b/src/msgpack/type/set.hpp @@ -56,7 +56,7 @@ inline void operator<< (object::with_zone& o, const std::set& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->malloc(sizeof(object)*v.size())); + object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); @@ -102,7 +102,7 @@ inline void operator<< (object::with_zone& o, const std::multiset& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->malloc(sizeof(object)*v.size())); + object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/src/msgpack/type/string.hpp b/src/msgpack/type/string.hpp index 692f3921..836de2c6 100644 --- a/src/msgpack/type/string.hpp +++ b/src/msgpack/type/string.hpp @@ -42,7 +42,7 @@ inline packer& operator<< (packer& o, const std::string& v) inline void operator<< (object::with_zone& o, const std::string& v) { o.type = type::BIN; - char* ptr = (char*)o.zone->malloc(v.size()); + char* ptr = (char*)o.zone->allocate_align(v.size()); o.via.bin.ptr = ptr; o.via.bin.size = (uint32_t)v.size(); memcpy(ptr, v.data(), v.size()); diff --git a/src/msgpack/type/tr1/unordered_map.hpp b/src/msgpack/type/tr1/unordered_map.hpp index b652c3f6..830561cb 100644 --- a/src/msgpack/type/tr1/unordered_map.hpp +++ b/src/msgpack/type/tr1/unordered_map.hpp @@ -77,7 +77,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->malloc(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); @@ -127,7 +127,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m o.via.map.ptr = nullptr; o.via.map.size = 0; } else { - object_kv* p = static_cast(o.zone->malloc(sizeof(object_kv)*v.size())); + object_kv* p = static_cast(o.zone->allocate_align(sizeof(object_kv)*v.size())); object_kv* const pend = p + v.size(); o.via.map.ptr = p; o.via.map.size = v.size(); diff --git a/src/msgpack/type/tr1/unordered_set.hpp b/src/msgpack/type/tr1/unordered_set.hpp index 985dec6a..c2b2ce8e 100644 --- a/src/msgpack/type/tr1/unordered_set.hpp +++ b/src/msgpack/type/tr1/unordered_set.hpp @@ -74,7 +74,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_s o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->malloc(sizeof(object)*v.size())); + object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); @@ -120,7 +120,7 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->malloc(sizeof(object)*v.size())); + object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/src/msgpack/type/tuple.hpp.erb b/src/msgpack/type/tuple.hpp.erb index 6eb0cf5f..6159bc04 100644 --- a/src/msgpack/type/tuple.hpp.erb +++ b/src/msgpack/type/tuple.hpp.erb @@ -184,7 +184,7 @@ inline void operator<< ( object::with_zone& o, const type::tuple, A<%=j%><%}%>>& v) { o.type = type::ARRAY; - o.via.array.ptr = static_cast(o.zone->malloc(sizeof(object)*<%=i+1%>)); + o.via.array.ptr = static_cast(o.zone->allocate_align(sizeof(object)*<%=i+1%>)); o.via.array.size = <%=i+1%>; <%0.upto(i) {|j|%> o.via.array.ptr[<%=j%>] = object(v.template get<<%=j%>>(), o.zone);<%}%> diff --git a/src/msgpack/type/vector.hpp b/src/msgpack/type/vector.hpp index 03b9d198..ac01b3c5 100644 --- a/src/msgpack/type/vector.hpp +++ b/src/msgpack/type/vector.hpp @@ -61,7 +61,7 @@ inline void operator<< (object::with_zone& o, const std::vector& v) o.via.array.ptr = nullptr; o.via.array.size = 0; } else { - object* p = static_cast(o.zone->malloc(sizeof(object)*v.size())); + object* p = static_cast(o.zone->allocate_align(sizeof(object)*v.size())); object* const pend = p + v.size(); o.via.array.ptr = p; o.via.array.size = v.size(); diff --git a/src/msgpack/unpack.hpp b/src/msgpack/unpack.hpp index 07e599b6..0bda90f0 100644 --- a/src/msgpack/unpack.hpp +++ b/src/msgpack/unpack.hpp @@ -109,7 +109,7 @@ struct unpack_array { bool operator()(unpack_user&u, unsigned int n, object& o) const { o.type = type::ARRAY; o.via.array.size = 0; - o.via.array.ptr = (object*)u.z().malloc(n*sizeof(object)); + o.via.array.ptr = (object*)u.z().allocate_align(n*sizeof(object)); if(o.via.array.ptr == nullptr) { return false; } return true; } @@ -122,7 +122,7 @@ struct unpack_map { bool operator()(unpack_user& u, unsigned int n, object& o) const { o.type = type::MAP; o.via.map.size = 0; - o.via.map.ptr = (object_kv*)u.z().malloc(n*sizeof(object_kv)); + o.via.map.ptr = (object_kv*)u.z().allocate_align(n*sizeof(object_kv)); if(o.via.map.ptr == nullptr) { return false; } return true; } diff --git a/src/msgpack/zone.hpp.erb b/src/msgpack/zone.hpp.erb index 6c2ab0ab..35baf049 100644 --- a/src/msgpack/zone.hpp.erb +++ b/src/msgpack/zone.hpp.erb @@ -154,8 +154,8 @@ public: public: static zone* create(size_t chunk_size); static void destroy(zone* zone); - void* malloc(size_t size); - void* malloc_no_align(size_t size); + void* allocate_align(size_t size); + void* allocate_no_align(size_t size); void push_finalizer(void (*func)(void*), void* data); @@ -172,12 +172,12 @@ public: <%}%> private: - void undo_malloc(size_t size); + void undo_allocate(size_t size); template static void object_destructor(void* obj); - void* malloc_expand(size_t size); + void* allocate_expand(size_t size); }; @@ -201,16 +201,16 @@ inline zone::zone(size_t chunk_size) /* throw() */ :chunk_size_(chunk_size), chu { } -inline void* zone::malloc(size_t size) +inline void* zone::allocate_align(size_t size) { - return malloc_no_align( + return allocate_no_align( ((size)+((MSGPACK_ZONE_ALIGN)-1)) & ~((MSGPACK_ZONE_ALIGN)-1)); } -inline void* zone::malloc_no_align(size_t size) +inline void* zone::allocate_no_align(size_t size) { if(chunk_list_.free_ < size) { - return malloc_expand(size); + return allocate_expand(size); } char* ptr = chunk_list_.ptr_; @@ -220,7 +220,7 @@ inline void* zone::malloc_no_align(size_t size) return ptr; } -inline void* zone::malloc_expand(size_t size) +inline void* zone::allocate_expand(size_t size) { chunk_list* const cl = &chunk_list_; @@ -271,7 +271,7 @@ void zone::object_destructor(void* obj) reinterpret_cast(obj)->~T(); } -inline void zone::undo_malloc(size_t size) +inline void zone::undo_allocate(size_t size) { chunk_list_.ptr_ -= size; chunk_list_.free_ += size; @@ -281,18 +281,18 @@ inline void zone::undo_malloc(size_t size) template , typename A<%=j%><%}%>> T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>) { - void* x = malloc(sizeof(T)); + void* x = allocate_align(sizeof(T)); try { finalizer_array_.push(&zone::object_destructor, x); } catch (...) { - undo_malloc(sizeof(T)); + undo_allocate(sizeof(T)); throw; } try { return new (x) T(<%=(1..i).map{|j|"a#{j}"}.join(', ')%>); } catch (...) { --finalizer_array_.tail_; - undo_malloc(sizeof(T)); + undo_allocate(sizeof(T)); throw; } } diff --git a/test/zone.cc b/test/zone.cc index 5c771028..b364e3fb 100644 --- a/test/zone.cc +++ b/test/zone.cc @@ -1,12 +1,12 @@ #include #include -TEST(zone, malloc) +TEST(zone, allocate_align) { msgpack::zone z; - char* buf1 = (char*)z.malloc(4); + char* buf1 = (char*)z.allocate_align(4); memcpy(buf1, "test", 4); - char* buf2 = (char*)z.malloc(4); + char* buf2 = (char*)z.allocate_align(4); memcpy(buf2, "test", 4); } @@ -68,11 +68,11 @@ TEST(zone, push_finalizer_unique_ptr) } -TEST(zone, malloc_no_align) +TEST(zone, allocate_no_align) { msgpack::zone z; - char* buf1 = (char*)z.malloc_no_align(4); - char* buf2 = (char*)z.malloc_no_align(4); + char* buf1 = (char*)z.allocate_no_align(4); + char* buf2 = (char*)z.allocate_no_align(4); EXPECT_EQ(buf1+4, buf2); }