1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4
5#ifndef __JITHOST_H__
6#define __JITHOST_H__
7
8// Common implementation of ICorJitHost that respects CLR host policies.
9class JitHost : public ICorJitHost
10{
11private:
12 static JitHost s_theJitHost;
13
14 struct Slab
15 {
16 Slab * pNext;
17 size_t size;
18 Thread* affinity;
19 };
20
21 CrstStatic m_jitSlabAllocatorCrst;
22 Slab* m_pCurrentCachedList;
23 Slab* m_pPreviousCachedList;
24 size_t m_totalCached;
25 DWORD m_lastFlush;
26
27 JitHost() {}
28 JitHost(const JitHost& other) = delete;
29 JitHost& operator=(const JitHost& other) = delete;
30
31 void init();
32 void reclaim();
33
34public:
35 virtual void* allocateMemory(size_t size);
36 virtual void freeMemory(void* block);
37 virtual int getIntConfigValue(const wchar_t* name, int defaultValue);
38 virtual const wchar_t* getStringConfigValue(const wchar_t* name);
39 virtual void freeStringConfigValue(const wchar_t* value);
40 virtual void* allocateSlab(size_t size, size_t* pActualSize);
41 virtual void freeSlab(void* slab, size_t actualSize);
42
43 static void Init() { s_theJitHost.init(); }
44 static void Reclaim() { s_theJitHost.reclaim(); }
45
46 static ICorJitHost* getJitHost() { return &s_theJitHost; }
47};
48
49#endif // __JITHOST_H__
50