Changeset 95860 in vbox
- Timestamp:
- Jul 27, 2022 12:54:16 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 152585
- Location:
- trunk
- Files:
-
- 1 added
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/generic/new-delete-generic.cpp
r95811 r95860 29 29 * Header Files * 30 30 *********************************************************************************************************************************/ 31 #include "alloc-ef.h"31 #include <iprt/nocrt/new> 32 32 33 #include <iprt/as m.h>34 #include < new>33 #include <iprt/assert.h> 34 #include <iprt/mem.h> 35 35 36 36 … … 40 40 /** @todo test this on MSC */ 41 41 42 /** MSC declares the operators as cdecl it seems. */ 43 #ifdef _MSC_VER 44 # define RT_EF_CDECL __cdecl 45 #else 46 # define RT_EF_CDECL 47 #endif 48 49 /** MSC doesn't use the standard namespace. */ 50 #ifdef _MSC_VER 51 # define RT_EF_SIZE_T size_t 52 #else 53 # define RT_EF_SIZE_T std::size_t 54 #endif 55 56 /** The hint that we're throwing std::bad_alloc is not apprecitated by MSC. */ 42 void *RT_NEW_DELETE_CDECL operator new(RT_NEW_DELETE_SIZE_T cb) RT_NEW_DELETE_THROWS_BAD_ALLOC 43 { 44 void *pv = RTMemAlloc(cb); 57 45 #ifdef RT_EXCEPTIONS_ENABLED 58 # ifdef _MSC_VER59 # define RT_EF_THROWS_BAD_ALLOC60 # define RT_EF_NOTHROW RT_NO_THROW_DEF61 # else62 # ifdef _GLIBCXX_THROW63 # define RT_EF_THROWS_BAD_ALLOC _GLIBCXX_THROW(std::bad_alloc)64 # elif defined(__cplusplus) && (__cplusplus + 0) < 20170065 # define RT_EF_THROWS_BAD_ALLOC throw(std::bad_alloc)66 # else67 # define RT_EF_THROWS_BAD_ALLOC noexcept(false)68 # endif69 # define RT_EF_NOTHROW throw()70 # endif71 #else /* !RT_EXCEPTIONS_ENABLED */72 # define RT_EF_THROWS_BAD_ALLOC73 # define RT_EF_NOTHROW74 #endif /* !RT_EXCEPTIONS_ENABLED */75 76 77 void *RT_EF_CDECL operator new(RT_EF_SIZE_T cb) RT_EF_THROWS_BAD_ALLOC78 {79 void *pv = rtR3MemAlloc("new", RTMEMTYPE_NEW, cb, cb, NULL, ASMReturnAddress(), NULL, 0, NULL);80 46 if (!pv) 81 47 throw std::bad_alloc(); 48 #endif 82 49 return pv; 83 50 } 84 51 85 52 86 void *RT_ EF_CDECL operator new(RT_EF_SIZE_T cb, const std::nothrow_t &) RT_EF_NOTHROW53 void *RT_NEW_DELETE_CDECL operator new(RT_NEW_DELETE_SIZE_T cb, const std::nothrow_t &) RT_NEW_DELETE_NOTHROW 87 54 { 88 void *pv = rtR3MemAlloc("new nothrow", RTMEMTYPE_NEW, cb, cb, NULL, ASMReturnAddress(), NULL, 0, NULL); 89 return pv; 55 return RTMemAlloc(cb); 90 56 } 91 57 92 58 93 void RT_ EF_CDECL operator delete(void *pv) RT_EF_NOTHROW59 void RT_NEW_DELETE_CDECL operator delete(void *pv) RT_NEW_DELETE_NOTHROW 94 60 { 95 rtR3MemFree("delete", RTMEMTYPE_DELETE, pv, 0, ASMReturnAddress(), NULL, 0, NULL);61 RTMemFree(pv); 96 62 } 97 63 98 64 99 65 #ifdef __cpp_sized_deallocation 100 void RT_ EF_CDECL operator delete(void *pv, RT_EF_SIZE_T cb) RT_EF_NOTHROW66 void RT_NEW_DELETE_CDECL operator delete(void *pv, RT_NEW_DELETE_SIZE_T cb) RT_NEW_DELETE_NOTHROW 101 67 { 102 68 NOREF(cb); 103 69 AssertMsgFailed(("cb ignored!\n")); 104 rtR3MemFree("delete", RTMEMTYPE_DELETE, pv, 0, ASMReturnAddress(), NULL, 0, NULL);70 RTMemFree(pv); 105 71 } 106 72 #endif 107 73 108 74 109 void RT_ EF_CDECL operator delete(void * pv, const std::nothrow_t &) RT_EF_NOTHROW75 void RT_NEW_DELETE_CDECL operator delete(void *pv, const std::nothrow_t &) RT_NEW_DELETE_NOTHROW 110 76 { 111 rtR3MemFree("delete nothrow", RTMEMTYPE_DELETE, pv, 0, ASMReturnAddress(), NULL, 0, NULL);77 RTMemFree(pv); 112 78 } 113 79 … … 121 87 */ 122 88 123 void *RT_ EF_CDECL operator new[](RT_EF_SIZE_T cb) RT_EF_THROWS_BAD_ALLOC89 void *RT_NEW_DELETE_CDECL operator new[](RT_NEW_DELETE_SIZE_T cb) RT_NEW_DELETE_THROWS_BAD_ALLOC 124 90 { 125 void *pv = rtR3MemAlloc("new[]", RTMEMTYPE_NEW_ARRAY, cb, cb, NULL, ASMReturnAddress(), NULL, 0, NULL); 91 void *pv = RTMemAlloc(cb); 92 #ifdef RT_EXCEPTIONS_ENABLED 126 93 if (!pv) 127 94 throw std::bad_alloc(); 95 #endif 128 96 return pv; 129 97 } 130 98 131 99 132 void * RT_EF_CDECL operator new[](RT_EF_SIZE_T cb, const std::nothrow_t &) RT_EF_NOTHROW100 void *RT_NEW_DELETE_CDECL operator new[](RT_NEW_DELETE_SIZE_T cb, const std::nothrow_t &) RT_NEW_DELETE_NOTHROW 133 101 { 134 void *pv = rtR3MemAlloc("new[] nothrow", RTMEMTYPE_NEW_ARRAY, cb, cb, NULL, ASMReturnAddress(), NULL, 0, NULL); 135 return pv; 102 return RTMemAlloc(cb); 136 103 } 137 104 138 105 139 void RT_ EF_CDECL operator delete[](void * pv) RT_EF_NOTHROW106 void RT_NEW_DELETE_CDECL operator delete[](void * pv) RT_NEW_DELETE_NOTHROW 140 107 { 141 rtR3MemFree("delete[]", RTMEMTYPE_DELETE_ARRAY, pv, 0, ASMReturnAddress(), NULL, 0, NULL);108 RTMemFree(pv); 142 109 } 143 110 144 111 145 112 #ifdef __cpp_sized_deallocation 146 void RT_ EF_CDECL operator delete[](void * pv, RT_EF_SIZE_T cb) RT_EF_NOTHROW113 void RT_NEW_DELETE_CDECL operator delete[](void * pv, RT_NEW_DELETE_SIZE_T cb) RT_NEW_DELETE_NOTHROW 147 114 { 148 115 NOREF(cb); 149 116 AssertMsgFailed(("cb ignored!\n")); 150 rtR3MemFree("delete[]", RTMEMTYPE_DELETE_ARRAY, pv, 0, ASMReturnAddress(), NULL, 0, NULL);117 RTMemFree(pv); 151 118 } 152 119 #endif 153 120 154 121 155 void RT_ EF_CDECL operator delete[](void *pv, const std::nothrow_t &) RT_EF_NOTHROW122 void RT_NEW_DELETE_CDECL operator delete[](void *pv, const std::nothrow_t &) RT_NEW_DELETE_NOTHROW 156 123 { 157 rtR3MemFree("delete[] nothrow", RTMEMTYPE_DELETE_ARRAY, pv, 0, ASMReturnAddress(), NULL, 0, NULL);124 RTMemFree(pv); 158 125 } 159 126
Note:
See TracChangeset
for help on using the changeset viewer.