FMemStats.h 2.36 KB
Newer Older
1 2 3
#ifndef FMEMSTATS_H
#define FMEMSTATS_H

4
#include "FGlobal.hpp"
5 6

#include <stdlib.h>
7
#include <cstring>
8 9

#ifdef SCALFMM_USE_MEM_STATS
10 11
#include <new>
#include <stdexcept>
12
#warning You are using meme stats
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
    void* operator new(std::size_t n) throw(std::bad_alloc);
    void* operator new(size_t n, std::nothrow_t const&) throw();
    void* operator new[](size_t n) throw(std::bad_alloc);
    void* operator new[](size_t n, std::nothrow_t const&) throw();
    void operator delete(void* p) throw();
    void operator delete(void* p, std::nothrow_t const&) throw();
    void operator delete[](void* p) throw();
    void operator delete[](void* p, std::nothrow_t const&) throw();
#endif

class FMemStats {
private:
    unsigned long long maxAllocated;
    unsigned long long totalAllocated;
    std::size_t currentAllocated;

    FMemStats()
        : maxAllocated(0), totalAllocated(0), currentAllocated(0) {
    }

    void allocate(const std::size_t size){
        currentAllocated += size;
        totalAllocated += size;

        if(maxAllocated < currentAllocated){
            maxAllocated = currentAllocated;
        }
    }

    void deallocate(const std::size_t size){
        currentAllocated -= size;
    }

46
#ifdef SCALFMM_USE_MEM_STATS
47 48 49 50 51 52 53 54
    friend void* operator new(std::size_t n) throw(std::bad_alloc);
    friend void* operator new(size_t n, std::nothrow_t const&) throw();
    friend void* operator new[](size_t n) throw(std::bad_alloc);
    friend void* operator new[](size_t n, std::nothrow_t const&) throw();
    friend void operator delete(void* p) throw();
    friend void operator delete(void* p, std::nothrow_t const&) throw();
    friend void operator delete[](void* p) throw();
    friend void operator delete[](void* p, std::nothrow_t const&) throw();
55
#endif
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

public:
    static FMemStats controler;

    unsigned long long getMaxAllocated() const{
        return maxAllocated;
    }

    unsigned long long getTotalAllocated() const{
        return totalAllocated;
    }

    std::size_t getCurrentAllocated() const{
        return currentAllocated;
    }
71 72 73 74 75 76 77 78 79 80 81 82

    float getMaxAllocatedMB() const{
        return float(getMaxAllocated()) / 1024 / 1024;
    }

    float getTotalAllocatedMB() const{
        return float(getTotalAllocated()) / 1024 / 1024;
    }

    float getCurrentAllocatedMB() const{
        return float(getCurrentAllocated()) / 1024 / 1024;
    }
83 84 85 86
};


#endif // FMEMSTATS_H