免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: scu_guzo
打印 上一主题 下一主题

一道迅雷笔试题,实现memcpy [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-09-22 21:49 |只看该作者
2.(~(dest-src)+1)<len

两个不同数组的指针可以相减吗?  减出来的是什么东西?

论坛徽章:
0
12 [报告]
发表于 2009-09-23 18:57 |只看该作者

回复 #11 koleol 的帖子

字数差

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
13 [报告]
发表于 2009-09-24 11:08 |只看该作者
在论坛上看了这么多的memcpy没有一个程序考虑到了内存对齐~

原来看到一个汇编语言版的memcpy,就是先处理对齐问题,然后按照一个通用寄存器的宽度来拷贝。这种方法绝对比任何*p++ = *s++之类的方法都要快。

论坛徽章:
0
14 [报告]
发表于 2009-09-24 13:09 |只看该作者
真要谈memcpy优化,最重要是prefetch啊

论坛徽章:
0
15 [报告]
发表于 2009-09-25 14:56 |只看该作者

回复 #12 shurady 的帖子

在《primer plus C》书中,第10章 数组和指针,第275页求差值这一段中, 有这样描述, “有效指针差值运算的前提是参加运算的两个指针是指向同一数组(或是其中之一指向数组后面的第一个地址)” 。

这里楼主给出的这个判断差值的方法是不是有问题, 他怎么保证这两个数组的内存是挨着的?

论坛徽章:
0
16 [报告]
发表于 2009-09-25 20:43 |只看该作者

回复 #15 koleol 的帖子

这是寝室哥们在讨论过后给出的解法,只知道是这样一种解法,不知道为什么

论坛徽章:
0
17 [报告]
发表于 2009-09-25 21:06 |只看该作者

回复 #7 scutan 的帖子

呵呵,版主你也是川大的吧?

这次面试之后彻底没信心了,抓紧补c/c++的基础呢

论坛徽章:
0
18 [报告]
发表于 2009-09-26 00:29 |只看该作者
原帖由 scu_guzo 于 2009-9-25 21:06 发表
呵呵,版主你也是川大的吧?

这次面试之后彻底没信心了,抓紧补c/c++的基础呢

呵呵,C/C++和算法基本上是最重要的。

论坛徽章:
0
19 [报告]
发表于 2009-09-26 11:41 |只看该作者
题目有错误吧!

    if( _______ )
    {
        printf("overlap!\n");
    }

(! (dest && src))    应该是这个吧。

分2中情况 就是为了防止copy 的时候 相互覆盖。

小技巧。

但是 分4个字节copy 这个做法 是很寒。 只能说面试题是这样

论坛徽章:
0
20 [报告]
发表于 2009-09-26 12:13 |只看该作者
题目本身就有问题
1.拷贝完之后少了个return dest;

2. 从   
   if( _______ ) return dest;

    if( _______ )
    {
        printf("overlap!";
    }
代码风格不一致,可以看出xunlei里面没有一个统一的编码规范。

3.判断为overlap之后不退出,还继续copy?
以它将*src声明为const来看,原意是不想改变src的内容,因此overlap之后应该立即return。

4.既然内存没overlap,那么从前往后或从后往前拷贝就没必要分开了啦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP