From ae31e7f929ae804cd1580fde3b3f57fc1c096414 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Tue, 1 May 2018 00:43:25 -0500 Subject: [PATCH] [ox/std] Add alloca and malloca --- deps/ox/src/ox/std/new.hpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/deps/ox/src/ox/std/new.hpp b/deps/ox/src/ox/std/new.hpp index bf45334cd..a34acb7e3 100644 --- a/deps/ox/src/ox/std/new.hpp +++ b/deps/ox/src/ox/std/new.hpp @@ -5,8 +5,42 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + #pragma once #include "types.hpp" +#if defined(_MSC_VER) +#include +#define ox_alloca(size) _alloca(size) +#elif !defined(OX_USE_STDLIB) +#define ox_alloca(size) __builtin_alloca(size) +#else +#include +#include +#define ox_alloca(size) alloca(size) +#endif + + +namespace ox { + +constexpr auto MaxAllocaSize = 10 * 1024; + +} + +#if defined(OX_USE_STDLIB) +#define ox_malloca(size) size > MaxAllocaSize ? malloc(MaxAllocaSize) : ox_alloca(size) +#else +#define ox_malloca(size) ox_alloca(size) +#endif + +inline void ox_freea(std::size_t size, void *ptr) { + if constexpr(ox::defines::UseStdLib) { + if (size > ox::MaxAllocaSize) { + free(ptr); + } + } +} + + void* operator new(std::size_t, void*) noexcept;