其中这部分代码5.6.1的逻辑还在IOSToolChain里,因为我将其合并到了 [Image Removed]
[Attachment Removed]
Liu.Wei
(Liu.Wei)
3
Hi,正常合入这个改动应该就好了,不过可以再试试给UE定义的内存分配函数在iOS平台下都加上__attribute__((weak))的属性标签,有客户这么改后,在IOS18上的设备就好了。
#if PLATFORM_IOS
#define WEAK_SYM __attribute__((weak))
#else
#define WEAK_SYM
#endif
#if !FORCE_ANSI_ALLOCATOR
#define REPLACEMENT_OPERATOR_NEW_AND_DELETE \
OPERATOR_NEW_MSVC_PRAGMA void* WEAK_SYM operator new ( size_t Size ) OPERATOR_NEW_THROW_SPEC { return FMemory::Malloc( Size ); } \
OPERATOR_NEW_MSVC_PRAGMA void* WEAK_SYM operator new[]( size_t Size ) OPERATOR_NEW_THROW_SPEC { return FMemory::Malloc( Size ); } \
OPERATOR_NEW_MSVC_PRAGMA void* WEAK_SYM operator new ( size_t Size, const std::nothrow_t& ) OPERATOR_NEW_NOTHROW_SPEC { return FMemory::Malloc( Size ); } \
OPERATOR_NEW_MSVC_PRAGMA void* WEAK_SYM operator new[]( size_t Size, const std::nothrow_t& ) OPERATOR_NEW_NOTHROW_SPEC { return FMemory::Malloc( Size ); } \
void WEAK_SYM operator delete ( void* Ptr ) OPERATOR_DELETE_THROW_SPEC { FMemory::Free( Ptr ); } \
void WEAK_SYM operator delete[]( void* Ptr ) OPERATOR_DELETE_THROW_SPEC { FMemory::Free( Ptr ); } \
void WEAK_SYM operator delete ( void* Ptr, const std::nothrow_t& ) OPERATOR_DELETE_NOTHROW_SPEC { FMemory::Free( Ptr ); } \
void WEAK_SYM operator delete[]( void* Ptr, const std::nothrow_t& ) OPERATOR_DELETE_NOTHROW_SPEC { FMemory::Free( Ptr ); } \
void WEAK_SYM operator delete ( void* Ptr, size_t Size ) OPERATOR_DELETE_THROW_SPEC { FMemory::Free( Ptr ); } \
void WEAK_SYM operator delete[]( void* Ptr, size_t Size ) OPERATOR_DELETE_THROW_SPEC { FMemory::Free( Ptr ); } \
void WEAK_SYM operator delete ( void* Ptr, size_t Size, const std::nothrow_t& ) OPERATOR_DELETE_NOTHROW_SPEC { FMemory::Free( Ptr ); } \
void WEAK_SYM operator delete[]( void* Ptr, size_t Size, const std::nothrow_t& ) OPERATOR_DELETE_NOTHROW_SPEC { FMemory::Free( Ptr ); }
#else
#define REPLACEMENT_OPERATOR_NEW_AND_DELETE
#endif
另外能试一下在void FMemory::Free里,改成下面这样试一下吗?
FMEMORY_INLINE_FUNCTION_DECORATOR void FMemory::Free(void* Original)
{
if (!Original)
{
FScopedMallocTimer Timer(3);
return;
}
#if PLATFORM_IOS
if (FPlatformMemory::PtrIsOSMalloc(Original))
{
SystemFree(Original);
return;
}
#endif
[Attachment Removed]