Skip to content

Commit 0b190db

Browse files
committed
Work of Memory.
1 parent 899da7b commit 0b190db

File tree

3 files changed

+42
-39
lines changed

3 files changed

+42
-39
lines changed

src/xrCore/xrMemory.cpp

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#include "stdafx.h"
22

33
#include <Psapi.h>
4-
#include "tbb/scalable_allocator.h"
54

65
xrMemory Memory;
76
// Also used in src\xrCore\xrDebug.cpp to prevent use of g_pStringContainer before it initialized
@@ -82,24 +81,6 @@ void xrMemory::mem_compact()
8281
SetProcessWorkingSetSize(GetCurrentProcess(), size_t(-1), size_t(-1));
8382
}
8483

85-
void* xrMemory::mem_alloc(size_t size)
86-
{
87-
stat_calls++;
88-
return scalable_malloc(size);
89-
}
90-
91-
void xrMemory::mem_free(void* P)
92-
{
93-
stat_calls++;
94-
scalable_free(P);
95-
}
96-
97-
void* xrMemory::mem_realloc(void* P, const size_t size)
98-
{
99-
stat_calls++;
100-
return scalable_realloc(P, size);
101-
}
102-
10384
// xr_strdup
10485
pstr xr_strdup(pcstr string)
10586
{

src/xrCore/xrMemory.h

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,14 @@
33
#include "_types.h"
44

55
#include "tbb/tbb_allocator.h"
6+
#include "tbb/scalable_allocator.h"
7+
8+
/*
9+
Можно заключить - прокси перехватывает не всегда и/или не всё используемые функции.
10+
И в очень малом количестве случаев это приводит к странностям при работе с памятью.
11+
Поэтому всё-же стоит переопределять для большинства случаев операторы new и delete.
12+
А для остального мы будем полагать (и надеяться), что прокси справится без проблем.
13+
*/
614
#include "tbb/tbbmalloc_proxy.h"
715

816
class XRCORE_API xrMemory
@@ -16,10 +24,10 @@ class XRCORE_API xrMemory
1624

1725
public:
1826
size_t mem_usage();
19-
void mem_compact();
20-
void* mem_alloc(size_t size);
21-
void* mem_realloc(void* p, const size_t size);
22-
void mem_free(void* p);
27+
void mem_compact();
28+
inline void* mem_alloc (size_t size) { stat_calls++; return scalable_malloc ( size); };
29+
inline void* mem_realloc(void* ptr, size_t size) { stat_calls++; return scalable_realloc(ptr, size); };
30+
inline void mem_free (void* ptr) { stat_calls++; scalable_free (ptr); };
2331
};
2432

2533
extern XRCORE_API xrMemory Memory;
@@ -31,29 +39,44 @@ extern XRCORE_API xrMemory Memory;
3139
#define CopyMemory(a, b, c) memcpy(a, b, c)
3240
#define FillMemory(a, b, c) memset(a, c, b)
3341

34-
#define xr_delete(x)\
35-
{\
36-
delete (x);\
37-
(x) = nullptr;\
42+
/*
43+
Начиная со стандарта C++11 нет необходимости объявлять все формы операторов new и delete.
44+
*/
45+
46+
inline void* operator new(size_t size)
47+
{
48+
return Memory.mem_alloc(size);
3849
}
3950

40-
// generic "C"-like allocations/deallocations
41-
template <class T>
42-
T* xr_alloc(const size_t count)
43-
{ return (T*)Memory.mem_alloc(count * sizeof(T)); }
51+
inline void operator delete(void* ptr) noexcept
52+
{
53+
Memory.mem_free(ptr);
54+
}
4455

56+
template <class T>
57+
inline void xr_delete(T*& ptr) noexcept
58+
{
59+
delete ptr;
60+
ptr = nullptr;
61+
}
4562

63+
// generic "C"-like allocations/deallocations
64+
template <class T>
65+
inline T* xr_alloc(size_t count)
66+
{
67+
return (T*)Memory.mem_alloc(count * sizeof(T));
68+
}
4669
template <class T>
47-
void xr_free(T*& P) noexcept
70+
inline void xr_free(T*& ptr) noexcept
4871
{
49-
if (P)
72+
if (ptr)
5073
{
51-
Memory.mem_free((void*)P);
52-
P = nullptr;
74+
Memory.mem_free((void*)ptr);
75+
ptr = nullptr;
5376
}
5477
}
55-
inline void* xr_malloc(const size_t size) { return Memory.mem_alloc(size); }
56-
inline void* xr_realloc(void* P, const size_t size) { return Memory.mem_realloc(P, size); }
78+
inline void* xr_malloc (size_t size) { return Memory.mem_alloc (size); }
79+
inline void* xr_realloc(void* ptr, size_t size) { return Memory.mem_realloc(ptr, size); }
5780

5881
XRCORE_API pstr xr_strdup(pcstr string);
5982

src/xrEngine/PS_instance.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,5 @@ void CPS_Instance::PSI_destroy()
6060
//----------------------------------------------------
6161
void CPS_Instance::PSI_internal_delete()
6262
{
63-
CPS_Instance* self = this;
64-
xr_delete(self);
63+
delete this;
6564
}

0 commit comments

Comments
 (0)