UE4 内存管理测试 FMemory

本文详细展示了在Unreal Engine 4中进行内存分配、初始化、复制、移动及释放的过程,同时深入探讨了字符串的长度计算、字符集转换及拼接技巧。通过具体实例,揭示了不同操作对内存布局的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uint8*pdata = (uint8*)FMemory::Malloc(1024);
    FMemory::Memzero(pdata, 1024);
    uint32 size = (uint32)FMemory::GetAllocSize(pdata);
    UE_LOG(LogTemp, Warning, TEXT("内存大小{%d}!"), size);
    //LogTemp: Warning: 内存大小{1024}!
    UE_LOG(LogTemp, Warning, TEXT("字符串长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //LogTemp: Warning: 字符检测大小{0}!
    FString fs = TEXT("1234567890中国");
    FString fn = TEXT("abcdefg人");
    TCHAR*tt = fs.GetCharArray().GetData();
    uint8*ptmp = (uint8*)TCHAR_TO_UTF8(tt);
    int32 fslen = FCStringAnsi::Strlen((ANSICHAR*)ptmp);
    UE_LOG(LogTemp, Warning, TEXT("fs len{%d},{%d}"), fslen, FCString::Strlen(tt));
    //LogTemp: Warning: fs len{16},{12}
    FMemory::Memcpy(pdata, ptmp, fslen);
    UE_LOG(LogTemp, Warning, TEXT("copy 1 %s"), UTF8_TO_TCHAR(ptmp));
    //LogTemp: Warning: copy 1 1234567890中国
    UE_LOG(LogTemp, Warning, TEXT("字符串长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //LogTemp: Warning: 字符串长度{16}!
    tt = fn.GetCharArray().GetData();
    ptmp = (uint8*)TCHAR_TO_UTF8(tt);
    int32 fnlen = FCStringAnsi::Strlen((ANSICHAR*)ptmp);
    FMemory::Memcpy(pdata + fslen, ptmp, fnlen);
    UE_LOG(LogTemp, Warning, TEXT("copy 2 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 2 1234567890中国abcdefg人
    UE_LOG(LogTemp, Warning, TEXT("字符串长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //======================================================================
    FMemory::Memmove(pdata, pdata + 10, 8);
    UE_LOG(LogTemp, Warning, TEXT("copy 3 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 3 中国ab90中国abcdefg人
    FMemory::Memzero(pdata + 8, 18);
    UE_LOG(LogTemp, Warning, TEXT("copy 3 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 3 中国ab
    UE_LOG(LogTemp, Warning, TEXT("字符串3长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //LogTemp: Warning: 字符串3长度{8}!
    FMemory::Memmove(pdata, pdata + 3, 5);
    UE_LOG(LogTemp, Warning, TEXT("copy 4 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 4 国ab?ab
    UE_LOG(LogTemp, Warning, TEXT("字符串4长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //LogTemp: Warning: 字符串4长度{6}!
    FMemory::Memzero(pdata + 5, 3);
    UE_LOG(LogTemp, Warning, TEXT("copy 4 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 4 国ab
    UE_LOG(LogTemp, Warning, TEXT("字符串4长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //    //LogTemp: Warning: 字符串4长度{5}!
    FMemory::Free(pdata);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值