Sha256: b74f4e90009969d2fb06ce8575c687cc7b424c792528019ba250d4bf4642f331

Contents?: true

Size: 1.14 KB

Versions: 10

Compression:

Stored size: 1.14 KB

Contents

#ifndef _MEMORY_H_
#define _MEMORY_H_

#include <cstdlib>

/**
 * Pre-allocate a chunk of memory and allocate them in small pieces.
 * Those memory are never freed after allocation. Used for persist
 * data like dictionary contents that will never be destroyed unless
 * the application exited.
 */

namespace rmmseg
{
    const size_t REALLOC_SIZE = 2048; /* 2KB */

    extern size_t  _pool_size;
    extern char   *_pool_base;

    inline void *pool_alloc(size_t len)
    {
        void *mem = _pool_base;
        
        if (len <= _pool_size)
        {
            _pool_size -= len;
            _pool_base += len;
            return mem;
        }
        
        /* NOTE: the remaining memory is simply discard, which WILL
         * cause memory leak. However, this function is not for allocating
         * large object. Larger pre-alloc chunk size will also reduce the
         * impact of this leak. So this is generally not a problem. */
        _pool_base = static_cast<char *>(std::malloc(REALLOC_SIZE));
        mem = _pool_base;
        _pool_base += len;
        _pool_size = REALLOC_SIZE - len;
        return mem;
    }
}

#endif /* _MEMORY_H_ */

Version data entries

10 entries across 10 versions & 4 rubygems

Version Path
rmmseg-cpp-new-0.3.1 ext/rmmseg/memory.h
rmmseg-cpp-new-0.3.0 ext/rmmseg/memory.h
lijia-rmmseg-cpp-10.2.9.2 ext/rmmseg/memory.h
rmmseg-cpp-traditional-2.0.4 ext/rmmseg/memory.h
rmmseg-cpp-traditional-2.0.2 ext/rmmseg/memory.h
rmmseg-cpp-traditional-2.0.0 ext/rmmseg/memory.h
rmmseg-cpp-traditional-1.0.1 ext/rmmseg/memory.h
rmmseg-cpp-traditional-1.0.0 ext/rmmseg/memory.h
rmmseg-cpp-traditional-0.0.2 ext/rmmseg/memory.h
rmmseg-cpp-0.2.9 ext/rmmseg/memory.h