| 1234567891011121314151617181920212223242526272829303132333435363738 |
- using ARMeilleure.Common;
- using System;
- using System.Runtime.CompilerServices;
- namespace ARMeilleure
- {
- static class Allocators
- {
- [ThreadStatic] private static ArenaAllocator _default;
- [ThreadStatic] private static ArenaAllocator _operands;
- [ThreadStatic] private static ArenaAllocator _operations;
- [ThreadStatic] private static ArenaAllocator _references;
- public static ArenaAllocator Default => GetAllocator(ref _default, 256 * 1024, 4);
- public static ArenaAllocator Operands => GetAllocator(ref _operands, 64 * 1024, 8);
- public static ArenaAllocator Operations => GetAllocator(ref _operations, 64 * 1024, 8);
- public static ArenaAllocator References => GetAllocator(ref _references, 64 * 1024, 8);
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- private static ArenaAllocator GetAllocator(ref ArenaAllocator alloc, uint pageSize, uint pageCount)
- {
- if (alloc == null)
- {
- alloc = new ArenaAllocator(pageSize, pageCount);
- }
- return alloc;
- }
- public static void ResetAll()
- {
- Default.Reset();
- Operands.Reset();
- Operations.Reset();
- References.Reset();
- }
- }
- }
|