相关疑难解决方法(0)

GPL代码:什么算作衍生作品?

我正在开发一个我希望在许可许可下发布的开源项目,因为它是一个库,而不是一个应用程序,而且就个人而言,我不喜欢copyleft的库代码.如果我浏览用不同编程语言编写的GPL代码只是为了大致了解如何做某事,然后用我正在使用的语言编写一个类似或相同算法的不同实现,那么可能会是什么后果?如果我的代码与他们的代码有些相似,并且明显受到他们的影响,那么copyleft所有者会有任何合理的投诉吗?这些灰色区域通常如何工作?

gpl

40
推荐指数
2
解决办法
8756
查看次数

为什么标准字符串函数比我的自定义字符串函数更快?

我决定找到2个功能的速度:

  • strcmp - string.h中定义的标准比较函数
  • xstrcmp-一个具有相同参数并且相同的函数,就像我创建它一样.

这是我的xstrcmp函数:

int xstrlen(char *str)
{
    int i;
    for(i=0;;i++)
    {
        if(str[i]=='\0')
            break;
    }
    return i;
}

int xstrcmp(char *str1, char *str2)
{
    int i, k;
    if(xstrlen(str1)!=xstrlen(str2))
        return -1;
    k=xstrlen(str1)-1;
    for(i=0;i<=k;i++)
    {
        if(str1[i]!=str2[i])
            return -1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不想依赖strlen,因为我想要用户定义的所有内容.

所以,我找到了结果.strcmp每毫秒进行364次比较,而我的xstrcmp每毫秒只做20次比较(至少在我的电脑上!)

任何人都可以告诉为什么会这样吗?xstrcmp函数如何使自己如此之快?

c c++ performance compare strcmp

22
推荐指数
3
解决办法
3341
查看次数

查找缓冲区中第一次出现字节的最快方法

放弃


我正在寻找最快的方法来识别字节缓冲区中给定字节的第一次出现.

这让人联想到在字符串中第一次出现字符,除了:

  • 字节缓冲区不是NUL终止的,而是我有一个显式长度(可能是嵌入的NUL字符)
  • 字节缓冲区没有在一个string或中分配vector,我只传下一个切片(又名,指针和长度)

基本解决方案是:

size_t search(char const* buffer, size_t length, char c) {
    return std::find(buffer, buffer + length, c) - buffer;
}
Run Code Online (Sandbox Code Playgroud)

然而,使用Godbolt编译器(-O2 -msse2 -mavx)的快速往返并没有显示任何矢量化指令的暗示,只有一些展开,所以我想知道这是否是最优的.

有没有更快的方法来查找缓冲区中给定字节的第一次出现?

注意:只有第一次出现很重要.

注意:我只关心Linux上的现代x86_64 CPU,但我鼓励尽可能通用的答案并清楚地提及假设.

c++

5
推荐指数
1
解决办法
731
查看次数

标签 统计

c++ ×2

c ×1

compare ×1

gpl ×1

performance ×1

strcmp ×1