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

Is this method of copying a string faster than copying each char individually?

这种复制字符串的方法比单独复制每个字符更快吗?这段代码的想法是它可以(但我不确定是否如此)一次复制 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='[=10=]';
    return copy;
}

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

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

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

A pointer to an object type may be converted to a pointer to a different object type. If the resulting pointer is not correctly aligned for the referenced type, the behavior is undefined.

在许多体系结构上,这只会导致 "bus error"。

要了解这些技巧是如何工作的,请查看您最喜欢的 C 库的源代码并查找它们对 memcpymemmove 的实现。