diff options
author | aleexfi <aleexfi@yandex-team.com> | 2022-10-04 13:53:13 +0300 |
---|---|---|
committer | aleexfi <aleexfi@yandex-team.com> | 2022-10-04 13:53:13 +0300 |
commit | 4cf93820c1ced899f7d1be40a63e60451003fb8a (patch) | |
tree | d00ccd2660e302ebdb391b315df275021e0a81e0 /library/cpp | |
parent | 11734939277c0f1cca0aa21c2e5d28dd7a4077c6 (diff) | |
download | ydb-4cf93820c1ced899f7d1be40a63e60451003fb8a.tar.gz |
Fix of aligned_free on windows
Diffstat (limited to 'library/cpp')
-rw-r--r-- | library/cpp/yt/memory/new-inl.h | 28 | ||||
-rw-r--r-- | library/cpp/yt/memory/ref_counted.h | 4 | ||||
-rw-r--r-- | library/cpp/yt/misc/cast-inl.h | 4 | ||||
-rw-r--r-- | library/cpp/yt/string/enum-inl.h | 4 |
4 files changed, 26 insertions, 14 deletions
diff --git a/library/cpp/yt/memory/new-inl.h b/library/cpp/yt/memory/new-inl.h index 5d5fcc45c4..40bf49d3e4 100644 --- a/library/cpp/yt/memory/new-inl.h +++ b/library/cpp/yt/memory/new-inl.h @@ -188,11 +188,15 @@ Y_FORCE_INLINE TIntrusivePtr<T> SafeConstruct(void* ptr, As&&... args) template <size_t Size, size_t Alignment> void* AllocateConstSizeAligned() { +#ifdef _win_ + return AllignedMalloc(Size, Alignment); +#else if (Alignment <= 16) { return NYTAlloc::AllocateConstSize<Size>(); } else { return AllignedMalloc(Size, Alignment); } +#endif } } // namespace NDetail @@ -203,11 +207,11 @@ template <class T, class... As, class> Y_FORCE_INLINE TIntrusivePtr<T> New( As&&... args) { - void* ptr = NDetail::AllocateConstSizeAligned< - NDetail::TConstructHelper<T>::Size, - NDetail::TConstructHelper<T>::Alignment>(); + void* ptr = NYT::NDetail::AllocateConstSizeAligned< + NYT::NDetail::TConstructHelper<T>::Size, + NYT::NDetail::TConstructHelper<T>::Alignment>(); - return NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...); + return NYT::NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...); } template <class T, class... As, class> @@ -215,11 +219,11 @@ Y_FORCE_INLINE TIntrusivePtr<T> New( typename T::TAllocator* allocator, As&&... args) { - auto* ptr = allocator->Allocate(NDetail::TConstructHelper<T>::Size); + auto* ptr = allocator->Allocate(NYT::NDetail::TConstructHelper<T>::Size); if (!ptr) { return nullptr; } - return NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...); + return NYT::NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...); } //////////////////////////////////////////////////////////////////////////////// @@ -232,11 +236,15 @@ Y_FORCE_INLINE TIntrusivePtr<T> NewWithExtraSpace( auto totalSize = NYT::NDetail::TConstructHelper<T>::Size + extraSpaceSize; void* ptr = nullptr; +#ifdef _win_ + ptr = NYT::NDetail::AllignedMalloc(totalSize, NYT::NDetail::TConstructHelper<T>::Alignment); +#else if (NYT::NDetail::TConstructHelper<T>::Alignment <= 16) { ptr = NYTAlloc::Allocate(totalSize); } else { ptr = NYT::NDetail::AllignedMalloc(totalSize, NYT::NDetail::TConstructHelper<T>::Alignment); } +#endif return NYT::NDetail::SafeConstruct<T>(ptr, std::forward<As>(args)...); } @@ -262,9 +270,9 @@ template <class T, class TDeleter, class... As> Y_FORCE_INLINE TIntrusivePtr<T> NewWithDelete(const TDeleter& deleter, As&&... args) { using TWrapper = TRefCountedWrapperWithDeleter<T, TDeleter>; - void* ptr = NDetail::AllocateConstSizeAligned<sizeof(TWrapper), alignof(TWrapper)>(); + void* ptr = NYT::NDetail::AllocateConstSizeAligned<sizeof(TWrapper), alignof(TWrapper)>(); - auto* instance = NDetail::NewEpilogue<TWrapper>( + auto* instance = NYT::NDetail::NewEpilogue<TWrapper>( ptr, deleter, std::forward<As>(args)...); @@ -280,9 +288,9 @@ Y_FORCE_INLINE TIntrusivePtr<T> NewWithLocation( As&&... args) { using TWrapper = TRefCountedWrapperWithCookie<T>; - void* ptr = NDetail::AllocateConstSizeAligned<sizeof(TWrapper), alignof(TWrapper)>(); + void* ptr = NYT::NDetail::AllocateConstSizeAligned<sizeof(TWrapper), alignof(TWrapper)>(); - auto* instance = NDetail::NewEpilogue<TWrapper>(ptr, std::forward<As>(args)...); + auto* instance = NYT::NDetail::NewEpilogue<TWrapper>(ptr, std::forward<As>(args)...); #ifdef YT_ENABLE_REF_COUNTED_TRACKING instance->InitializeTracking(GetRefCountedTypeCookieWithLocation<T, TTag, Counter>(location)); diff --git a/library/cpp/yt/memory/ref_counted.h b/library/cpp/yt/memory/ref_counted.h index 9c049c0998..e48d601c84 100644 --- a/library/cpp/yt/memory/ref_counted.h +++ b/library/cpp/yt/memory/ref_counted.h @@ -38,7 +38,11 @@ struct TFreeMemory { static void Do(void* ptr) { +#ifdef _win_ + ::_aligned_free(ptr); +#else ::free(ptr); +#endif } }; diff --git a/library/cpp/yt/misc/cast-inl.h b/library/cpp/yt/misc/cast-inl.h index 1920b7c0b7..a8b34c8af3 100644 --- a/library/cpp/yt/misc/cast-inl.h +++ b/library/cpp/yt/misc/cast-inl.h @@ -67,7 +67,7 @@ inline TString FormatInvalidCastValue(char8_t value) template <class T, class S> bool TryIntegralCast(S value, T* result) { - if (!NDetail::IsInIntegralRange<T>(value)) { + if (!NYT::NDetail::IsInIntegralRange<T>(value)) { return false; } *result = static_cast<T>(value); @@ -80,7 +80,7 @@ T CheckedIntegralCast(S value) T result; if (!TryIntegralCast<T>(value, &result)) { throw TSimpleException(Sprintf("Argument value %s is out of expected range", - NDetail::FormatInvalidCastValue(value).c_str())); + NYT::NDetail::FormatInvalidCastValue(value).c_str())); } return result; } diff --git a/library/cpp/yt/string/enum-inl.h b/library/cpp/yt/string/enum-inl.h index ab8acff71b..7ce7d2a350 100644 --- a/library/cpp/yt/string/enum-inl.h +++ b/library/cpp/yt/string/enum-inl.h @@ -59,7 +59,7 @@ T ParseEnum(TStringBuf value) if (auto optionalResult = TryParseEnum<T>(value)) { return *optionalResult; } - NDetail::ThrowMalformedEnumValueException(TEnumTraits<T>::GetTypeName(), value); + NYT::NDetail::ThrowMalformedEnumValueException(TEnumTraits<T>::GetTypeName(), value); } template <class T> @@ -71,7 +71,7 @@ void FormatEnum(TStringBuilderBase* builder, T value, bool lowerCase) auto* literal = TEnumTraits<T>::FindLiteralByValue(value); if (!literal) { YT_VERIFY(!TEnumTraits<T>::IsBitEnum); - NDetail::FormatUnknownEnumValue( + NYT::NDetail::FormatUnknownEnumValue( builder, TEnumTraits<T>::GetTypeName(), static_cast<typename TEnumTraits<T>::TUnderlying>(value)); |