This commit is contained in:
parent
129c27a28d
commit
a7c1aad6fc
5 changed files with 101 additions and 7 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/memory/memcount.h
|
||||||
|
@brief ...
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_allocator__
|
#ifndef __cxz_allocator__
|
||||||
#define __cxz_allocator__
|
#define __cxz_allocator__
|
||||||
|
@ -16,7 +27,10 @@
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
/** *****
|
||||||
|
Allocator implementation
|
||||||
|
Takes care of proper alignment
|
||||||
|
*/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class Allocator
|
class Allocator
|
||||||
{
|
{
|
||||||
|
@ -24,26 +38,45 @@ namespace CNORXZ
|
||||||
|
|
||||||
typedef T value_type;
|
typedef T value_type;
|
||||||
|
|
||||||
static constexpr SizeT type_size = sizeof(T);
|
static constexpr SizeT type_size = sizeof(T); /** < type size */
|
||||||
static constexpr SizeT N = MAX_VSIZE;
|
static constexpr SizeT N = MAX_VSIZE; /** < size of the larges available intrinsics vector */
|
||||||
|
|
||||||
|
/** ***
|
||||||
|
Aligned data block type
|
||||||
|
The size equals the maximal intrinsics vectors size
|
||||||
|
*/
|
||||||
struct VX
|
struct VX
|
||||||
{
|
{
|
||||||
alignas(N) char x[N];
|
alignas(N) char x[N];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** default constructor */
|
||||||
Allocator() = default;
|
Allocator() = default;
|
||||||
|
|
||||||
|
/** (copy) construct from allocator for different data type
|
||||||
|
@tparam U input data type
|
||||||
|
@param x input allocator
|
||||||
|
*/
|
||||||
template <typename U>
|
template <typename U>
|
||||||
Allocator(const Allocator<U>& x) {}
|
Allocator(const Allocator<U>& x) {}
|
||||||
|
|
||||||
|
/** allocate n element of type T
|
||||||
|
@param n number of elements
|
||||||
|
*/
|
||||||
T* allocate(SizeT n);
|
T* allocate(SizeT n);
|
||||||
|
|
||||||
|
/** deallocate n elements
|
||||||
|
@param p pointer to first element
|
||||||
|
@param n number of elements
|
||||||
|
*/
|
||||||
void deallocate(T* p, SizeT n);
|
void deallocate(T* p, SizeT n);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** compare two cnorxz allocators; equality check returns always true */
|
||||||
template <class T, class U>
|
template <class T, class U>
|
||||||
bool operator==(const Allocator<T>& a, const Allocator<U>& b);
|
bool operator==(const Allocator<T>& a, const Allocator<U>& b);
|
||||||
|
|
||||||
|
/** compare two cnorxz allocators; unequality check returns always false */
|
||||||
template <class T, class U>
|
template <class T, class U>
|
||||||
bool operator!=(const Allocator<T>& a, const Allocator<U>& b);
|
bool operator!=(const Allocator<T>& a, const Allocator<U>& b);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/memory/memcount.h
|
||||||
|
@brief ...
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_memcount_h__
|
#ifndef __cxz_memcount_h__
|
||||||
#define __cxz_memcount_h__
|
#define __cxz_memcount_h__
|
||||||
|
@ -6,16 +17,33 @@
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
/** *****
|
||||||
|
Static class to track memory usage by cnorxz types
|
||||||
|
The usage variable can be changed only be an Allocator instance
|
||||||
|
|
||||||
|
@see Allocator
|
||||||
|
**/
|
||||||
class MemCount
|
class MemCount
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
static SizeT sMemUsage;
|
static SizeT sMemUsage; /**< current memory usage (bytes) */
|
||||||
|
|
||||||
|
/** increas memory usage
|
||||||
|
@param x number of bytes
|
||||||
|
*/
|
||||||
static void add(SizeT x);// { sMemUsage += x; }
|
static void add(SizeT x);// { sMemUsage += x; }
|
||||||
|
|
||||||
|
/** decreas memory usage
|
||||||
|
@param x number of bytes
|
||||||
|
*/
|
||||||
static void sub(SizeT x);// { sMemUsage -= x; }
|
static void sub(SizeT x);// { sMemUsage -= x; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MemCount() = delete; // static only
|
/** no instance construction (static) */
|
||||||
static SizeT usage();// { return sMemUsage; }
|
MemCount() = delete;
|
||||||
|
|
||||||
|
/** return current memory usage (bytes) */
|
||||||
|
static SizeT usage();
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
friend class Allocator;
|
friend class Allocator;
|
||||||
|
|
|
@ -1,2 +1,13 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/memory/memory.cc.h
|
||||||
|
@brief ...
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#include "allocator.cc.h"
|
#include "allocator.cc.h"
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file include/memory/memory.h
|
||||||
|
@brief ...
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#include "allocator.h"
|
#include "allocator.h"
|
||||||
#include "memcount.h"
|
#include "memcount.h"
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file lib/memory/memcount.cc
|
||||||
|
@brief ...
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#include "memory/memcount.h"
|
#include "memory/memcount.h"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue