forked from godotengine/godot
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
43 changed files
with
17,099 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2018-2021 Microsoft Corporation, Daan Leijen | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
/* ---------------------------------------------------------------------------- | ||
Copyright (c) 2018-2020 Microsoft Research, Daan Leijen | ||
This is free software; you can redistribute it and/or modify it under the | ||
terms of the MIT license. A copy of the license can be found in the file | ||
"LICENSE" at the root of this distribution. | ||
-----------------------------------------------------------------------------*/ | ||
#pragma once | ||
#ifndef MIMALLOC_NEW_DELETE_H | ||
#define MIMALLOC_NEW_DELETE_H | ||
|
||
// ---------------------------------------------------------------------------- | ||
// This header provides convenient overrides for the new and | ||
// delete operations in C++. | ||
// | ||
// This header should be included in only one source file! | ||
// | ||
// On Windows, or when linking dynamically with mimalloc, these | ||
// can be more performant than the standard new-delete operations. | ||
// See <https://en.cppreference.com/w/cpp/memory/new/operator_new> | ||
// --------------------------------------------------------------------------- | ||
#if defined(__cplusplus) | ||
#include <new> | ||
#include <mimalloc.h> | ||
|
||
#if defined(_MSC_VER) && defined(_Ret_notnull_) && defined(_Post_writable_byte_size_) | ||
// stay consistent with VCRT definitions | ||
#define mi_decl_new(n) mi_decl_nodiscard mi_decl_restrict _Ret_notnull_ _Post_writable_byte_size_(n) | ||
#define mi_decl_new_nothrow(n) mi_decl_nodiscard mi_decl_restrict _Ret_maybenull_ _Success_(return != NULL) _Post_writable_byte_size_(n) | ||
#else | ||
#define mi_decl_new(n) mi_decl_nodiscard mi_decl_restrict | ||
#define mi_decl_new_nothrow(n) mi_decl_nodiscard mi_decl_restrict | ||
#endif | ||
|
||
void operator delete(void* p) noexcept { mi_free(p); }; | ||
void operator delete[](void* p) noexcept { mi_free(p); }; | ||
|
||
void operator delete (void* p, const std::nothrow_t&) noexcept { mi_free(p); } | ||
void operator delete[](void* p, const std::nothrow_t&) noexcept { mi_free(p); } | ||
|
||
mi_decl_new(n) void* operator new(std::size_t n) noexcept(false) { return mi_new(n); } | ||
mi_decl_new(n) void* operator new[](std::size_t n) noexcept(false) { return mi_new(n); } | ||
|
||
mi_decl_new_nothrow(n) void* operator new (std::size_t n, const std::nothrow_t& tag) noexcept { (void)(tag); return mi_new_nothrow(n); } | ||
mi_decl_new_nothrow(n) void* operator new[](std::size_t n, const std::nothrow_t& tag) noexcept { (void)(tag); return mi_new_nothrow(n); } | ||
|
||
#if (__cplusplus >= 201402L || _MSC_VER >= 1916) | ||
void operator delete (void* p, std::size_t n) noexcept { mi_free_size(p,n); }; | ||
void operator delete[](void* p, std::size_t n) noexcept { mi_free_size(p,n); }; | ||
#endif | ||
|
||
#if (__cplusplus > 201402L || defined(__cpp_aligned_new)) | ||
void operator delete (void* p, std::align_val_t al) noexcept { mi_free_aligned(p, static_cast<size_t>(al)); } | ||
void operator delete[](void* p, std::align_val_t al) noexcept { mi_free_aligned(p, static_cast<size_t>(al)); } | ||
void operator delete (void* p, std::size_t n, std::align_val_t al) noexcept { mi_free_size_aligned(p, n, static_cast<size_t>(al)); }; | ||
void operator delete[](void* p, std::size_t n, std::align_val_t al) noexcept { mi_free_size_aligned(p, n, static_cast<size_t>(al)); }; | ||
void operator delete (void* p, std::align_val_t al, const std::nothrow_t&) noexcept { mi_free_aligned(p, static_cast<size_t>(al)); } | ||
void operator delete[](void* p, std::align_val_t al, const std::nothrow_t&) noexcept { mi_free_aligned(p, static_cast<size_t>(al)); } | ||
|
||
void* operator new (std::size_t n, std::align_val_t al) noexcept(false) { return mi_new_aligned(n, static_cast<size_t>(al)); } | ||
void* operator new[](std::size_t n, std::align_val_t al) noexcept(false) { return mi_new_aligned(n, static_cast<size_t>(al)); } | ||
void* operator new (std::size_t n, std::align_val_t al, const std::nothrow_t&) noexcept { return mi_new_aligned_nothrow(n, static_cast<size_t>(al)); } | ||
void* operator new[](std::size_t n, std::align_val_t al, const std::nothrow_t&) noexcept { return mi_new_aligned_nothrow(n, static_cast<size_t>(al)); } | ||
#endif | ||
#endif | ||
|
||
#endif // MIMALLOC_NEW_DELETE_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/* ---------------------------------------------------------------------------- | ||
Copyright (c) 2018-2020 Microsoft Research, Daan Leijen | ||
This is free software; you can redistribute it and/or modify it under the | ||
terms of the MIT license. A copy of the license can be found in the file | ||
"LICENSE" at the root of this distribution. | ||
-----------------------------------------------------------------------------*/ | ||
#pragma once | ||
#ifndef MIMALLOC_OVERRIDE_H | ||
#define MIMALLOC_OVERRIDE_H | ||
|
||
/* ---------------------------------------------------------------------------- | ||
This header can be used to statically redirect malloc/free and new/delete | ||
to the mimalloc variants. This can be useful if one can include this file on | ||
each source file in a project (but be careful when using external code to | ||
not accidentally mix pointers from different allocators). | ||
-----------------------------------------------------------------------------*/ | ||
|
||
#include <mimalloc.h> | ||
|
||
// Standard C allocation | ||
#define malloc(n) mi_malloc(n) | ||
#define calloc(n,c) mi_calloc(n,c) | ||
#define realloc(p,n) mi_realloc(p,n) | ||
#define free(p) mi_free(p) | ||
|
||
#define strdup(s) mi_strdup(s) | ||
#define strndup(s,n) mi_strndup(s,n) | ||
#define realpath(f,n) mi_realpath(f,n) | ||
|
||
// Microsoft extensions | ||
#define _expand(p,n) mi_expand(p,n) | ||
#define _msize(p) mi_usable_size(p) | ||
#define _recalloc(p,n,c) mi_recalloc(p,n,c) | ||
|
||
#define _strdup(s) mi_strdup(s) | ||
#define _strndup(s,n) mi_strndup(s,n) | ||
#define _wcsdup(s) (wchar_t*)mi_wcsdup((const unsigned short*)(s)) | ||
#define _mbsdup(s) mi_mbsdup(s) | ||
#define _dupenv_s(b,n,v) mi_dupenv_s(b,n,v) | ||
#define _wdupenv_s(b,n,v) mi_wdupenv_s((unsigned short*)(b),n,(const unsigned short*)(v)) | ||
|
||
// Various Posix and Unix variants | ||
#define reallocf(p,n) mi_reallocf(p,n) | ||
#define malloc_size(p) mi_usable_size(p) | ||
#define malloc_usable_size(p) mi_usable_size(p) | ||
#define malloc_good_size(sz) mi_malloc_good_size(sz) | ||
#define cfree(p) mi_free(p) | ||
|
||
#define valloc(n) mi_valloc(n) | ||
#define pvalloc(n) mi_pvalloc(n) | ||
#define reallocarray(p,s,n) mi_reallocarray(p,s,n) | ||
#define reallocarr(p,s,n) mi_reallocarr(p,s,n) | ||
#define memalign(a,n) mi_memalign(a,n) | ||
#define aligned_alloc(a,n) mi_aligned_alloc(a,n) | ||
#define posix_memalign(p,a,n) mi_posix_memalign(p,a,n) | ||
#define _posix_memalign(p,a,n) mi_posix_memalign(p,a,n) | ||
|
||
// Microsoft aligned variants | ||
#define _aligned_malloc(n,a) mi_malloc_aligned(n,a) | ||
#define _aligned_realloc(p,n,a) mi_realloc_aligned(p,n,a) | ||
#define _aligned_recalloc(p,s,n,a) mi_aligned_recalloc(p,s,n,a) | ||
#define _aligned_msize(p,a,o) mi_usable_size(p) | ||
#define _aligned_free(p) mi_free(p) | ||
#define _aligned_offset_malloc(n,a,o) mi_malloc_aligned_at(n,a,o) | ||
#define _aligned_offset_realloc(p,n,a,o) mi_realloc_aligned_at(p,n,a,o) | ||
#define _aligned_offset_recalloc(p,s,n,a,o) mi_recalloc_aligned_at(p,s,n,a,o) | ||
|
||
#endif // MIMALLOC_OVERRIDE_H |
Oops, something went wrong.