在C语言中优化IPv6地址复制

3

由于现在memcpy应该已经被高度优化,所以使用显式循环展开来优化Ipv6地址的复制是否仍然有意义?

#include <netinet/in.h>

struct in6_addr IP_1;
struct in6_addr IP_2;
;
;
IP2.__in6_u.__u6_addr32[0] = IP1.__in6_u.__u6_addr32[0];
IP2.__in6_u.__u6_addr32[1] = IP1.__in6_u.__u6_addr32[1];
IP2.__in6_u.__u6_addr32[2] = IP1.__in6_u.__u6_addr32[2];
IP2.__in6_u.__u6_addr32[3] = IP1.__in6_u.__u6_addr32[3];

请注意,上述代码最适用于32位架构。是否有我不知道的最佳实践?

3
根据我对GCC的测试,你的代码比memcpyIP2=IP1都要慢。 memcpyIP2=IP1都生成相同的代码,没有循环,只有两个复制赋值,而不是四个。 - Dietrich Epp
是的,我希望在最好的情况下有两个64位赋值。 - ziu
显式循环展开无论如何都没有意义。任何半靠谱的编译器都会为您展开循环。 - Flexo
1个回答

9
您只需要执行IP2 = IP1;,并让编译器处理即可。

1
我总是忘记可以直接将一个相同类型的结构体分配给另一个结构体。 - ziu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接