UE5.6使用mallocbinned2崩溃。

hello,我们引擎最近从5.4.3升级到了​5.6.1然后合并了https://github.com/EpicGames/UnrealEngine/commit/bfa10b2f1ee699ea6b301adc9380bfb4078c8455\#diff\-8f184affdb8cb0fbee4db716a49cac2fcb9f2ce2b5196a126b60f30d4c48898c 官方5.7上关于mallocbinned2的修改,但是在启动的时候 依然会崩溃,麻烦看看在5.6的版本上,单纯合并这个不够吗。 [Image Removed]

[Attachment Removed]

其中​这部分代码5.6.1的逻辑还在IOSToolChain里,因为我将其合并到了 [Image Removed]

[Attachment Removed]

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]