由于现在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位架构。是否有我不知道的最佳实践?
memcpy
和IP2=IP1
都要慢。memcpy
和IP2=IP1
都生成相同的代码,没有循环,只有两个复制赋值,而不是四个。 - Dietrich Epp