memcpy学习,请赐教!

本文讨论了memcpy函数在不同平台上的效率问题,尤其是非对齐访问可能导致的性能下降。作者指出,虽然直接按字节拷贝可能在某些情况下速度更快,但在不支持非对齐访问的系统上可能会导致崩溃。为了兼顾效率和安全性,建议采用先对齐再拷贝的方法。文章提及在64位系统上遇到的问题,以及kernel中memcpy的高效实现,希望能有技术专家分享memcpy在Linux Kernel中的详细实现。
摘要由CSDN通过智能技术生成
**memcpy()**函数,网上的理解可谓是众说纷纭,足见其博大精深。在下以初学者的身份一探究竟。
  1. 关于memcpy()源码,鄙人解析说下:

    	void *memcpy(void *dst, void *src, size_t len)
    	{
    		if (dst == NULL || src == NULL || n <= 0) {
    			return NULL;
    		}
    		char *d = (char *)dst;
    		const char *s = (char *)src;
    			//没有内存重叠,从低地址开始复制
    		if (d <= s || d >= s + len){
    			while (len -- ) {
    				*d++ = *s++;
    			} else {
    				//有内存重叠,从高地址开始复制
    				s = s + len - 1;
    				d = d + len - 1;
    				while (len --) {
    					*d-- = * s--;
    				}
    				retuen dst;
    			}
    		}
    	}
    

    相比于以下写法(简化暂不考虑重合情况):

    void *memcpy(void *dst, void *src, size_t len)
    {
    	char *d = (char *)dst;
    	char *s = (char *)src;
    	int i;
    	for (i = 0; i < len; i++)
    		d[i] = s [i];
    	return dst;
    }
    
  2. 比较
    两种方法都是按照byte拷贝。但是第一种写法效率自然是要快&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值