免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2009-09-26 12:16 |只看该作者
原帖由 benjiam 于 2009-9-26 11:41 发表
题目有错误吧!

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

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

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

小技巧。

但是 分4个 ...


(! (dest && src)) 不能防止overlap吧

论坛徽章:
0
22 [报告]
发表于 2009-09-26 12:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

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

2. 从   
   if( _______ ) return dest;

    if( _______ )
    {
        printf("overlap!");
    }
代码风格不一致,可以看出xunlei里面没 ...



谢谢提醒,可能是我记得不太清楚了,
但确实那4个分开copy的做法我没看懂

论坛徽章:
0
24 [报告]
发表于 2009-09-28 21:30 |只看该作者
原帖由 jamesr 于 2009-9-26 12:28 发表
1、内存对齐要考虑,而且比较复杂,如64位系统上要考虑8字节对齐,然后再4字节对齐……
2、32位系统上用4字节copy,64位上用8字节copy
3、overlapping不用考虑,因为这个是memcpy,不是memmove。
4、prefetc ...


32位机上,那4个分开copy的做法是如何对齐的呢?

假设src从地址1开始,dest从地址13开始,那计算机在内存是如何处理的呢?

论坛徽章:
0
25 [报告]
发表于 2009-09-28 22:41 |只看该作者
4个char分开copy还是为了对寄存器对齐,char默认以8字节存储,4个8字节即为32位通用寄存器的大小,我想编译器在编译的过程中肯定会将while循环中的4次复制优化为1次32位寄存器的复制(这应该不是很高级的优化策略吧),并且虽说在各种机器上int,long的字长各不相同,但是char的字长都是相同的吧(ASCII码),从这一点上来看保证一次32位的复制策略应该是能加快读取速度。如果基于这一点考虑,将d,s声明成其他类型其实都是不合适的,若声明为32位(假设有这样一种统一字长),后面的单字节复制策略又不是很好实现了。其实个人认为这既然只是一道考题,也许考的没有那么复杂,也许仅仅就是考register关键字吧(个人拙见)。

[ 本帖最后由 garymb 于 2009-9-28 22:42 编辑 ]

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
26 [报告]
发表于 2009-10-09 13:44 |只看该作者
25l正解

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
27 [报告]
发表于 2010-03-07 20:00 |只看该作者
UP

论坛徽章:
0
28 [报告]
发表于 2010-03-07 20:20 |只看该作者
应该memmove函数实现吧

论坛徽章:
0
29 [报告]
发表于 2010-03-07 22:29 |只看该作者
{:3_185:},memcpy的glibc有点复杂,可以看看glibc的strlen

论坛徽章:
0
30 [报告]
发表于 2010-03-08 09:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP