Skip to content

Commit

Permalink
added the MemMgr fixed-sized memory allocator to complement the bump …
Browse files Browse the repository at this point in the history
…allocator
  • Loading branch information
danielrh committed Sep 28, 2015
1 parent 5e8458d commit a1613f8
Show file tree
Hide file tree
Showing 5 changed files with 647 additions and 1 deletion.
2 changes: 2 additions & 0 deletions build/cmake/CMakeLists.txt
Expand Up @@ -1400,6 +1400,7 @@ SET(SIRIKATA_CORE_SOURCES
${TRACE_PBJ_CPP_FILES}
${LIBCORE_SOURCE_DIR}/jpeg-arhc/Scan.cpp
${LIBCORE_SOURCE_DIR}/jpeg-arhc/BumpAllocator.cpp
${LIBCORE_SOURCE_DIR}/jpeg-arhc/MemMgrAllocator.cpp
${LIBCORE_SOURCE_DIR}/jpeg-arhc/Decoder.cpp
${LIBCORE_SOURCE_DIR}/jpeg-arhc/Compression.cpp
${LIBCORE_SOURCE_DIR}/jpeg-arhc/Zlib0.cpp
Expand Down Expand Up @@ -1977,6 +1978,7 @@ SET(BENCH_SOURCES

#test source files
SET(CXXTESTSources
${TEST_LIBCORE_SOURCE_DIR}/MemMgrAllocatorTest.hpp
${TEST_LIBCORE_SOURCE_DIR}/LosslessJpegTest.hpp
${TEST_LIBCORE_SOURCE_DIR}/MuxReadWriterTest.hpp
${TEST_LIBCORE_SOURCE_DIR}/CompressionTest.hpp
Expand Down
70 changes: 70 additions & 0 deletions libcore/include/sirikata/core/jpeg-arhc/MemMgrAllocator.hpp
@@ -0,0 +1,70 @@
//----------------------------------------------------------------
// Statically-allocated memory manager
//
// by Eli Bendersky (eliben@gmail.com)
//
// This code is in the public domain.

/* Sirikata Memory Management system
*
*
* Copyright (c) 2015 Eli Bendersky, Daniel Reiter Horn
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

namespace Sirikata {

// Initialize the memory manager. This function should be called
// exactly once per thread that wishes to allocate memory
//
SIRIKATA_FUNCTION_EXPORT void memmgr_init(size_t size, size_t min_pool_alloc_quantas = 256);

// Uninitialize the memory manager. This function should be called
// exactly once per thread that exits
SIRIKATA_FUNCTION_EXPORT void memmgr_destroy();

// 'malloc' clone
//
SIRIKATA_FUNCTION_EXPORT void* memmgr_alloc(size_t nbytes);

// 'free' clone
//
SIRIKATA_FUNCTION_EXPORT void memmgr_free(void* ap);

// Prints statistics about the current state of the memory
// manager
//
SIRIKATA_FUNCTION_EXPORT void memmgr_print_stats();

}
namespace Sirikata {
SIRIKATA_FUNCTION_EXPORT void *MemMgrAllocatorMalloc(void *opaque, size_t nmemb, size_t size);
SIRIKATA_FUNCTION_EXPORT void MemMgrAllocatorFree (void *opaque, void *ptr);
SIRIKATA_FUNCTION_EXPORT void * MemMgrAllocatorInit(size_t prealloc_size, unsigned char alignment);
SIRIKATA_FUNCTION_EXPORT void MemMgrAllocatorDestroy(void *opaque);
SIRIKATA_FUNCTION_EXPORT void* MemMgrAllocatorRealloc(void * ptr, size_t size, size_t *actualSize, unsigned int movable, void *opaque);
SIRIKATA_FUNCTION_EXPORT size_t MemMgrAllocatorMsize(void * ptr, void *opaque);

}
2 changes: 1 addition & 1 deletion libcore/include/sirikata/core/util/ArrayNd.hpp
Expand Up @@ -161,7 +161,7 @@ template <class T,
ShouldRoundPow2>::Slice slice(const StartEnd&range) const {
return slice<StartEnd::START, StartEnd::END>();
}
template <uint32 kstart, uint32 kend> typename Array1d<T, kend - kstart,
template <uint32_t kstart, uint32_t kend> typename Array1d<T, kend - kstart,
ShouldRoundPow2>::Slice slice() {
uint8_t assert_slice_legal[kend > s0 ? -1 : 1];
uint8_t assert_slice_start_legal[kend < kstart ? -1 : 1];
Expand Down

0 comments on commit a1613f8

Please sign in to comment.