(资料图片)
1、d,s是两个字符型指针,分别指向目标传位置和源传位置在判断 if(((long)d | (long)s) & lmask) 中,举个具体的例子假设是32位计算机,字长 word= 32/8 为4,即占4个byte,则lmask = 000……00011则d与s若是对齐的,应只有第三位及更高位不同(从低位算起)则(long)d | (long)s的最低两位一定是00,例如 d = **……**10100 s = **……**00100,则(long)d | (long)s = **……**10100,此时((long)d | (long)s) & lmask = 0,即对齐的话不做if中的语句,直接从整字开始copy内存内容否则,((long)d | (long)s) & lmask 非0,进入if语句:if((((long)d ^ (long)s) & lmask) || (count < lsize)) 中,记住lmask = 000……00011,所以(long)d ^ (long)s指d,s最低两位若完全相同,如都为10,10或者01,01,或者11,11,(不可能同时为00,00),则((long)d ^ (long)s) & lmask)为假,此时若count>=lsize,即判断为假,则len = lsize - ((long)d & lmask);其中((long)d & lmask)指d中后两位1的个数,为0个,1个,2个或者3个,而lsize - ((long)d & lmask)既是从d开始放,到下一个整字开始前还有几个空位,只能相应的为3个,2个,1个或者0个。
2、随后的语句是指把先前面的0~3个零头字节复制掉,count -= len; for(; len > 0; len--) *d++ = *s++;否则,若d与s开始时就完全错开,如(10,11)或者(count < lsize),判断为真,指的是若d与s开始时就完全错开,则逐字节复制即可,此时不可整字复制,或者虽然d和s是非整字对齐,如同为01,01,但是copy内容小于lsize(比如是4),不会存在大小为4byte的整字需要复制,则从d开始从头到尾复制即可,即for(len = count / lsize; len > 0; len--)循环中的内容。
3、for(len = count & lmask; len > 0; len--) *d++ = *s++;因为lmask = 000……00011,则len = count & lmask即字符串的最后0~3个字符,所以最后的for是把整字之外剩余的零头也copy过去讲的比较混乱,按这个思路仔细想象就行了。
4、Good luck!。
本文分享完毕,希望对大家有所帮助。
1、d,s是两个字符型指针,分别指向目标传位置和源传位置在判断if(((long)d|(long)s)&lma
400左右的生日礼物,如果只是普通朋友,可以根据他的喜好来选择礼物;如果他是喜欢运动,可以送一条围巾,他都喜欢运动的运动
太阳纸业4月6日在互动平台表示,近期,商品木浆价格的下跌有利于公司木浆系产品的成本节降,同时公司已经拥有相当规模的自制木浆等的生产
成灌铁路是成都市域铁路的首条线路,也是成都市轨道交通系统中投入运营的第一条线路,途经成都中心城区、郫县、都江堰等地(旧称灌县,简称“
AI监管山雨欲来?欧洲有分歧美国在观望,印度不管,OpenAI发声明,印度,美国,欧盟,拜登,openai,埃隆_马斯克,人工智能技术
C科源(301281)上市首日下跌12 29%,换手率达47 22%,成交额为3 44亿元。证券时报•数据宝统计显示,融
国网大数据中心支撑完成公司供区今年电力需求形势分析3月29日,国网大数据中心支撑国网营销部完成国家电网公司经营区域2023年电力需求形势分析
根据一份报告,特斯拉(TSLA US)在美国奥斯汀市的超级工厂的员工总数从2021年底的3523人增加至2022年底的12277人,同比增加了近两倍。特斯拉首
CETC陈志龙:我为自己发声,我爽了,痛快了,但我也被离职了,离职,辞职,陈志龙,科学家,法学家,cetc
双城区气象台发布霾黄色预警【III级 较重】