这种复制字符串的方法比单独复制每个字符更快吗?

时间:2015-12-17 13:34:02

标签: c string copy unsafe

这种复制字符串的方法比单独复制每个字符更快吗?这段代码的想法是它可以(但我不确定它是否如此)一次复制8个字节而不是单个字节更快。这是非常不安全的,但它似乎以某种方式工作。或者这只是一个坏主意?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void* copy_string(char s[])
{
    int len=strlen(s);
    int i=0;

    double *p=(double*)s;
    double *copy=(double*)malloc(len+1);

    while(i-len>8)
    {
         *copy=*(p++);
         copy++;
         i+=8;
    }
    char *p2=(char*)p;
    char *c=(char*)copy;
    while(i<len)
    {
         *c=*(p2++);
         c++;
         i++;
    }
    *c='\0';
    return copy;
}

int main()
{
    char s[]="GOODBYE SAFE WORLD!";
    char *c=copy_string(s);
    printf("%s",c);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

在某些体系结构的某些情况下,可能的技巧会更快。如果适用,请相信您的C库提供商了解这些技巧。

在您的情况下,您的代码完全错误。假设第一个while循环的条件是固定的,则违反了指针转换的规则:

  

指向对象类型的指针可以转换为指向a的指针   不同的对象类型。如果结果指针不正确   对于引用的类型,行为是未定义的。

在许多架构中,这只会导致“总线错误”。

要了解这些技巧的工作原理,请查看您最喜欢的C库的来源,并查看其memcpymemmove的实施情况。