硬汉嵌入式论坛

 找回密码
 立即注册
搜索
查看: 19|回复: 0
收起左侧

[STM32H7] MDK AC6的ofast优化,strlen实现31个字符长度计算,400M主频的STM32H7需要1us

[复制链接]

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
123875
QQ
发表于 5 小时前 | 显示全部楼层 |阅读模式


我认为这个时间有点长,1us就是400个时钟周期,求解个字符串长度竟然要400个时钟周期

GPT生成了个,还不如C库自带的

[C] 纯文本查看 复制代码
#include <stdint.h>
#include <stddef.h>

__STATIC_FORCEINLINE size_t strlen_fast64(const char *s)
{
    const char *p = s;

    /* 对齐到8字节 */
    while ((uintptr_t)p & 7U)
    {
        if (*p == '\0')
            return (size_t)(p - s);

        p++;
    }

    for (;;)
    {
        uint64_t v = *(const uint64_t *)p;

        if ((v - 0x0101010101010101ULL) &
            (~v) &
            0x8080808080808080ULL)
        {
            while (*p)
                p++;

            return (size_t)(p - s);
        }

        p += 8;
    }
}




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-8-24 06:06 , Processed in 0.493278 second(s), 5 queries , File On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表