青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

學(xué)海苦作舟,書山勤為徑

留下點(diǎn)回憶

常用鏈接

統(tǒng)計

積分與排名

Denoise

English study

Web技術(shù)

數(shù)據(jù)壓縮

一些連接

最新評論

一段關(guān)于memcpy的代碼

看到一段代碼,學(xué)習(xí)一下:

?1?void*?mymemcpy(?void*?dest,?const?void*?src,?size_t?count?)
?2?{
?3?????char*?d?=?(char*)dest;
?4?????const?char*?s?=?(const?char*)src;
?5?????int?n?=?count>>3;
?6?????switch(?count?&?7?)
?7?????{
?8??????????? case?0:??
?9?????????do?{??
10?????????????*d++?=?*s++;
11?????????????case?7:????? *d++?=?*s++;
12?????????????case?6:????????*d++?=?*s++;
13?????????????case?5:????????*d++?=?*s++;
14?????????????case?4:????????*d++?=?*s++;
15?????????????case?3:????????*d++?=?*s++;
16?????????????case?2:????????*d++?=?*s++;
17?????????????case?1:????????*d++?=?*s++;
18?????????}?while?(--n?>?0);
19?????}
20?????return?dest;
21?}

實際上也可以這么寫
?1?void*?mymemcpy(?void*?dest,?const?void*?src,?size_t?count?)?
?2?{?
?3?????char*?d?=?(char*)dest;?
?4?????const?char*?s?=?(const?char*)src;?
?5???//??int?n?=?(count?+?7)?/?8;?//?count?>?0?assumed?
?6?????int?n?=?count?>>?3;?
?7?????switch(?count?&?7?)?
?8?????{?
?9???????????????do?{??*d++?=?*s++;?
10?????case?7:????????*d++?=?*s++;?
11?????case?6:????????*d++?=?*s++;?
12?????case?5:????????*d++?=?*s++;?
13?????case?4:????????*d++?=?*s++;?
14?????case?3:????????*d++?=?*s++;?
15?????case?2:????????*d++?=?*s++;?
16?????case?1:????????*d++?=?*s++;?
17?????case?0??????????}?//while?(--n?>?0);?
18??????????????????while?(n--?>?0)?
19?????}?
20?
21?????return?dest;?
22?}?
23?
24?
這么寫更容易理解
實際上這里也可以是4個字節(jié)來復(fù)制,而不是8。其實這個看喜好。

posted on 2006-03-28 22:58 笨笨 閱讀(3017) 評論(23)  編輯 收藏 引用

評論

# re: 一段關(guān)于memcpy的代碼 2006-03-29 09:32 蟲子

你這個算法只處理了最后一部分?jǐn)?shù)據(jù)了吧,前面整8倍數(shù)的數(shù)據(jù)處理了嘛?  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-03-29 10:39 笨笨

呵呵,看來你還沒有理解這個代碼。
我解釋一下:
n是我們需要循環(huán)的次數(shù),我們的switch中有8個項,所以我們除8。
在count&7這個時候?qū)嶋H上這樣的count&0x111,我們僅僅取最低三位,也就是除8的余數(shù),這可以保證,即使count不能被8整除也能處理多余的數(shù)據(jù)。
好了,現(xiàn)在回到循環(huán),第一輪處理多余的部分(如果有),然后用N來控制循環(huán)次數(shù)

這里的case語句會從上到下一直執(zhí)行,因為沒有break語句

最終可以保證我們需要的次數(shù)  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-03-29 10:41 笨笨

實際上這和:
1 void* mymemcpy( void* dest, const void* src, size_t count )
2 {
3 char* d = (char*)dest;
4 const char* s = (const char*)src;
5 do {
*d++ = *s++;
10
18 } while (count -- > 0) ;
20
21 return dest;
22 }
沒有本質(zhì)區(qū)別,僅僅循環(huán)的次數(shù)減少了。
有人說這個提高的效率,不知道提高在什么地方。
另外,我們也可以用4,16等任意數(shù)字來代替這里的8,當(dāng)然以方便處理為依據(jù)。  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-03-29 16:48 蟲子

do{}while();不是應(yīng)該放在switch外面嗎?
  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-03-29 21:29 笨笨

不是,是就不對了  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-03-31 13:36 芋頭

的確是看過這么寫的,不過不知道怎么優(yōu)化的,我覺得應(yīng)該是效率不高吧。效率高的做法一般是超過一定長度,就選按每4字節(jié)整體拷貝,生成的匯編指令一般是rep movl...,剩下幾字節(jié)單獨(dú)拷貝。編譯器都會特殊處理這個函數(shù)。

上面這個代碼在我的GCC上用最高的優(yōu)化方式也不能生成高效代碼。  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-04-01 09:46 沐楓

個人覺得很難優(yōu)化。因為每個字節(jié)拷貝,都要留一個跳轉(zhuǎn)入口。編譯器又怎么敢私自用8字節(jié)操作指令直接優(yōu)化掉它呢。
由此估計,寫此代碼純粹是為了挑戰(zhàn)C/C++的語法。  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-04-03 15:41 a1240

我個人感覺,如果沒有特殊的要求,還是不要這樣寫代碼為好。畢竟,簡單直觀的代碼才好維護(hù)嘛。  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-04-16 17:35 請問:

能否解釋一下switch語句:
switch( count & 7 ) 8 {
9 do { *d++ = *s++;
10 case 7: *d++ = *s++;
11 case 6: *d++ = *s++;
12 case 5: *d++ = *s++;
13 case 4: *d++ = *s++;
14 case 3: *d++ = *s++;
15 case 2: *d++ = *s++;
16 case 1: *d++ = *s++;
17 case 0 } //while (--n > 0);
18 while (n-- > 0)
19 }
  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-04-16 22:03 笨笨

看上面的回復(fù)  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-04-19 11:12 LiLing

這樣寫是為了提高內(nèi)存訪問效率,各位可以看看計算機(jī)組成原理中的內(nèi)存結(jié)構(gòu)就清楚了。  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-11-15 12:49 qzq

根本不可能高效,原因有2個:
1. 不算循環(huán),拷貝每個字節(jié),也要2次++,1次拷貝。
2. 用匯編更高效

但沒有必要重新發(fā)明輪子。
C的庫函數(shù)或者操作系統(tǒng)的標(biāo)準(zhǔn)函數(shù),如:
CopyMemory ()
memcpy()
這種內(nèi)存代碼你千萬不要嘗試自己去實現(xiàn),那將是一種災(zāi)難,在每個操作系統(tǒng)/編譯器中,內(nèi)存拷貝可以說是非常頻繁的,所以系統(tǒng)/編譯器的內(nèi)存拷貝函數(shù)基本上都是非常完美的,VC++用的就是匯編代碼,
不信的話你可以自己寫一段內(nèi)存拷貝函數(shù),然后和系統(tǒng)的內(nèi)存拷貝函數(shù)比較一下就知道了。

  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-11-17 09:30 笨笨

我從來沒有說過這個代碼比系統(tǒng)函數(shù)高效,我提出來的目的在于和大家一道探討程序的寫法。  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-11-24 22:01 LeVaN

http://filmiki-najlepsze.lolas.pl ^^^ <a href="http://filmiki-najlepsze.lolas.pl">filmiki najlepsze</a> ^^^ [url]http://filmiki-najlepsze.lolas.pl[/url]  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2006-12-15 10:48 lwang

樓主第一個程序?qū)戝e了
應(yīng)該是n--,不是--n
不信試試下面的代碼,結(jié)果不對,改成n--就對了。
#include <stdio.h>

void* mymemcpy( void* dest, const void* src, size_t count )
{
char* d = (char*)dest;
const char* s = (const char*)src;
int n = count>>3;
switch( count & 7 )
{
case 0:
do {
*d++ = *s++;
case 7: *d++ = *s++;
case 6: *d++ = *s++;
case 5: *d++ = *s++;
case 4: *d++ = *s++;
case 3: *d++ = *s++;
case 2: *d++ = *s++;
case 1: *d++ = *s++;
} while (--n > 0);
}
return dest;
}
int main()
{
char * src = "hello, world.\n";
char dst[100] = {0};

mymemcpy(dst, src, strlen(src));
printf("src:%sdst:%s", src, dst);
return 0;
}  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2008-04-21 17:52 vfdff

switch( count & 7 )
7 {
8 case 0:
9 do {
10 *d++ = *s++;
11 case 7: *d++ = *s++;
12 case 6: *d++ = *s++;
13 case 5: *d++ = *s++;
14 case 4: *d++ = *s++;
15 case 3: *d++ = *s++;
16 case 2: *d++ = *s++;
17 case 1: *d++ = *s++;
18 } while (--n > 0);
19 }
怎么switch語句內(nèi)部可以有 除了case 之外的語句 *d++ = *s++; 呢 ?  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2009-01-03 02:15 fuck

放些狗屁,這種代碼能辨已過去嗎  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2012-06-09 21:28 personal loans

All people deserve good life and mortgage loans (goodfinance-blog.com) or short term loan can make it much better. Because people's freedom is based on money state.   回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2012-06-15 18:32 sociology essays types

Visit essaysservice firm (essaysservice.com) in order to receive a splendid opportunity to order best academic essays and make a change in your academic life owing to our cheap essay custom writing.  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2012-06-15 18:34 research essays

Visit Internet site (essaysservice.com) if you are anxious to buy papers and enjoy our help with research paper.  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2012-08-04 22:39 zhongyunde

為什么這么寫效率高?  回復(fù)  更多評論   

# re: 一段關(guān)于memcpy的代碼 2012-09-04 19:15 thesis

I guess that it is viable to go to this web page, just because simply here students will find the smashing information about this topic. Hence, the thesis service should use this for thesis report creating.   回復(fù)  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            激情综合自拍| 久久综合伊人77777蜜臀| 亚洲视频欧洲视频| 在线亚洲一区二区| 欧美日本不卡视频| 日韩视频在线观看一区二区| 一区二区三区免费在线观看| 国产精品mv在线观看| 一区二区免费在线播放| 午夜日韩在线| 一区视频在线播放| 欧美精品国产一区| 亚洲一区二区三区欧美| 久久一二三国产| 久久国产免费| 女人香蕉久久**毛片精品| 亚洲国产99| 欧美色图一区二区三区| 欧美一区二区三区精品| 欧美福利网址| 亚洲欧美视频在线观看视频| 韩国自拍一区| 欧美日韩一区二区在线观看| 午夜在线成人av| 亚洲国产合集| 国产精品国产三级国产aⅴ入口| 亚洲小说区图片区| 欧美国产在线观看| 午夜日韩激情| 制服丝袜亚洲播放| 尤物99国产成人精品视频| 欧美三级在线播放| 久久精品亚洲国产奇米99| 亚洲美女视频在线观看| 久久久噜噜噜久久| 一区二区三区不卡视频在线观看 | 久久久久国内| 亚洲午夜视频在线| 亚洲激情av| 激情综合色综合久久综合| 欧美性大战xxxxx久久久| 久色婷婷小香蕉久久| 午夜精品久久久久久久久久久久| 亚洲国产成人精品女人久久久 | 噜噜噜在线观看免费视频日韩| 亚洲黄色毛片| 狠狠色狠狠色综合| 国产麻豆精品在线观看| 欧美日韩网址| 欧美理论电影网| 老巨人导航500精品| 久久久久国产精品人| 欧美在线观看一二区| 亚洲欧美日韩国产成人| 亚洲天堂网在线观看| 亚洲免费播放| 99精品欧美一区二区三区| 亚洲精品久久久久久久久| 久久综合网色—综合色88| 久久成人免费| 国产精品美女www爽爽爽视频| 小嫩嫩精品导航| 午夜精品免费视频| 欧美一区2区三区4区公司二百| 亚洲综合不卡| 亚洲免费一在线| 欧美亚洲日本国产| 午夜免费在线观看精品视频| 亚洲欧美日韩一区| 欧美一级免费视频| 久久精品免费播放| 欧美一区二区三区四区在线| 先锋影音国产精品| 久久精品亚洲国产奇米99| 久久久久久久高潮| 免费成人性网站| 欧美激情精品久久久六区热门 | 亚洲最新视频在线| 亚洲一区日韩在线| 久久精品导航| 亚洲大片一区二区三区| 亚洲日本va午夜在线影院| 亚洲免费成人| 欧美在线视频观看免费网站| 快射av在线播放一区| 欧美日韩国产精品自在自线| 欧美亚州在线观看| 黄色精品一区| 一区二区三区视频观看| 欧美在线一二三四区| 免费在线亚洲欧美| 一区二区精品在线| 久久成人精品一区二区三区| 久久综合给合| 国产精品白丝jk黑袜喷水| 尤妮丝一区二区裸体视频| 9久草视频在线视频精品| 欧美在线亚洲综合一区| 亚洲国产精品精华液网站| 亚洲小说春色综合另类电影| 麻豆91精品91久久久的内涵| 欧美色欧美亚洲另类七区| 欧美精品免费观看二区| 国产精品美女午夜av| 影音先锋亚洲一区| 午夜精品偷拍| 亚洲国产va精品久久久不卡综合| 一本大道久久a久久精二百| 亚洲欧美制服另类日韩| 欧美美女福利视频| 国产一区二区无遮挡| 亚洲无限乱码一二三四麻| 久久亚洲私人国产精品va| 亚洲免费中文| 欧美**人妖| 欧美在线精品免播放器视频| 欧美日本免费| 精品av久久707| 欧美在线欧美在线| 亚洲视频www| 欧美日韩亚洲综合| 亚洲日韩视频| 欧美成人精品高清在线播放| 小黄鸭精品aⅴ导航网站入口| 欧美日韩一二三区| 亚洲美女啪啪| 欧美激情aⅴ一区二区三区| 久久www成人_看片免费不卡| 国产精品美女在线观看| 亚洲深夜福利网站| 亚洲精品免费一二三区| 欧美大片网址| 亚洲精品男同| 亚洲精品国产精品国自产观看浪潮| 久久精品国产免费看久久精品| 国产欧美精品| 午夜日韩av| 欧美一区二区视频在线观看| 国产欧美精品日韩精品| 亚洲午夜精品久久久久久浪潮| 亚洲人成在线观看一区二区 | 久久久久久久一区二区三区| 国产一区二区三区直播精品电影| 欧美一区二区三区精品电影| 亚洲欧美日韩另类| 国产一区二区三区不卡在线观看| 久久av老司机精品网站导航| 西瓜成人精品人成网站| 国产一区二区黄色| 中文精品视频一区二区在线观看| 99热免费精品| 国产视频在线一区二区| 久久夜色精品国产| 欧美激情亚洲精品| 亚洲女人av| 久久国产精品毛片| 亚洲高清在线精品| 艳妇臀荡乳欲伦亚洲一区| 欧美三级电影网| 久久精品国产欧美激情| 免费久久久一本精品久久区| 99亚洲精品| 欧美一进一出视频| 亚洲精品少妇| 午夜精品视频在线观看一区二区| 在线观看亚洲视频啊啊啊啊| 亚洲激情自拍| 国产午夜精品美女毛片视频| 亚洲国产精品123| 国产精品一区二区三区观看| 久久久久天天天天| 欧美日韩国产综合一区二区| 久久精品免视看| 欧美精品97| 国产亚洲福利| 欧美电影在线| 国产精品国产三级国产专播精品人| 欧美中文字幕视频| 欧美电影在线观看完整版| 午夜精品久久久久久久久久久久久| 久久成人18免费网站| 一区二区三区欧美亚洲| 久久精品欧美日韩| 亚洲午夜视频| 欧美成人午夜免费视在线看片| 欧美亚洲免费| 欧美日本亚洲韩国国产| 久久久水蜜桃| 国产精品久久久久久影院8一贰佰| 欧美国产日韩一区二区三区| 国产精品狼人久久影院观看方式| 欧美国产日韩在线| 国产一区二区三区日韩| 99re6热只有精品免费观看| 影音先锋亚洲视频| 欧美一区二区视频观看视频| 香蕉乱码成人久久天堂爱免费 | 久久久久久久高潮| 欧美三级乱码| 欧美一区二区三区在线免费观看|