Attention une mise à jour du service Gitlab va être effectuée le mardi 18 janvier (et non lundi 17 comme annoncé précédemment) entre 18h00 et 18h30. Cette mise à jour va générer une interruption du service dont nous ne maîtrisons pas complètement la durée mais qui ne devrait pas excéder quelques minutes.

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

4
#include "FGlobal.hpp"
5

6
#include <cstdlib>
7
#include <cstring>
8

9
10
11
12
13
14

/** Memstat has to be enabled in the cmake,
  * then it will use the know each allocate and deallocate
  * and give simple stats like max, total used, current used
  */

15
#ifdef SCALFMM_USE_MEM_STATS
16
17
#include <new>
#include <stdexcept>
18
#warning You are using meme stats
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
46
47
48
49
50
51
    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;
    }

52
#ifdef SCALFMM_USE_MEM_STATS
53
54
55
56
57
58
59
60
    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();
61
#endif
62
63

public:
64
    /** Singleton */
65
66
    static FMemStats controler;

67
    /** return the max that has been allocated */
68
69
70
71
    unsigned long long getMaxAllocated() const{
        return maxAllocated;
    }

72
    /** return the total memory allocated during the running */
73
74
75
76
    unsigned long long getTotalAllocated() const{
        return totalAllocated;
    }

77
    /** return the current size allcoated */
78
79
80
    std::size_t getCurrentAllocated() const{
        return currentAllocated;
    }
81

82
    /** get the max in MB */
83
84
85
86
    float getMaxAllocatedMB() const{
        return float(getMaxAllocated()) / 1024 / 1024;
    }

87
    /** get the total in MB */
88
89
90
91
    float getTotalAllocatedMB() const{
        return float(getTotalAllocated()) / 1024 / 1024;
    }

92
    /** get the current in MB */
93
94
95
    float getCurrentAllocatedMB() const{
        return float(getCurrentAllocated()) / 1024 / 1024;
    }
96

97
    /** To know if mem stat has been enabled */
98
99
100
101
102
103
104
    bool isUsed() const {
#ifdef SCALFMM_USE_MEM_STATS
        return true;
#else
        return false;
#endif
    }
105
106
107
108
};


#endif // FMEMSTATS_H