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

Dict.CN 在線詞典, 英語學習, 在線翻譯

學海苦作舟,書山勤為徑

留下點回憶

常用鏈接

統計

積分與排名

Denoise

English study

Web技術

數據壓縮

一些連接

最新評論

一段關于memcpy的代碼

看到一段代碼,學習一下:

?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個字節來復制,而不是8。其實這個看喜好。

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

評論

# re: 一段關于memcpy的代碼 2006-03-29 09:32 蟲子

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

# re: 一段關于memcpy的代碼 2006-03-29 10:39 笨笨

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

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

最終可以保證我們需要的次數  回復  更多評論   

# re: 一段關于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 }
沒有本質區別,僅僅循環的次數減少了。
有人說這個提高的效率,不知道提高在什么地方。
另外,我們也可以用4,16等任意數字來代替這里的8,當然以方便處理為依據。  回復  更多評論   

# re: 一段關于memcpy的代碼 2006-03-29 16:48 蟲子

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

# re: 一段關于memcpy的代碼 2006-03-29 21:29 笨笨

不是,是就不對了  回復  更多評論   

# re: 一段關于memcpy的代碼 2006-03-31 13:36 芋頭

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

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

# re: 一段關于memcpy的代碼 2006-04-01 09:46 沐楓

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

# re: 一段關于memcpy的代碼 2006-04-03 15:41 a1240

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

# re: 一段關于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 }
  回復  更多評論   

# re: 一段關于memcpy的代碼 2006-04-16 22:03 笨笨

看上面的回復  回復  更多評論   

# re: 一段關于memcpy的代碼 2006-04-19 11:12 LiLing

這樣寫是為了提高內存訪問效率,各位可以看看計算機組成原理中的內存結構就清楚了。  回復  更多評論   

# re: 一段關于memcpy的代碼 2006-11-15 12:49 qzq

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

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

  回復  更多評論   

# re: 一段關于memcpy的代碼 2006-11-17 09:30 笨笨

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

# re: 一段關于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]  回復  更多評論   

# re: 一段關于memcpy的代碼 2006-12-15 10:48 lwang

樓主第一個程序寫錯了
應該是n--,不是--n
不信試試下面的代碼,結果不對,改成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;
}  回復  更多評論   

# re: 一段關于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語句內部可以有 除了case 之外的語句 *d++ = *s++; 呢 ?  回復  更多評論   

# re: 一段關于memcpy的代碼 2009-01-03 02:15 fuck

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

# re: 一段關于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.   回復  更多評論   

# re: 一段關于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.  回復  更多評論   

# re: 一段關于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.  回復  更多評論   

# re: 一段關于memcpy的代碼 2012-08-04 22:39 zhongyunde

為什么這么寫效率高?  回復  更多評論   

# re: 一段關于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.   回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            激情久久久久| 久久精品国产一区二区电影| 午夜精品理论片| 亚洲一区欧美一区| 亚洲欧美激情精品一区二区| 亚洲欧美日韩精品久久奇米色影视| 欧美福利视频网站| 欧美成人国产| 亚洲久久成人| 午夜免费日韩视频| 美国十次了思思久久精品导航| 久久成人免费| 久久久久久久尹人综合网亚洲 | 欧美人牲a欧美精品| 欧美日韩国产免费观看| 国产日韩欧美亚洲| 亚洲品质自拍| 欧美在线视频导航| 亚洲国产成人久久| 亚洲自拍偷拍福利| 蜜桃精品久久久久久久免费影院| 中日韩视频在线观看| 午夜精品福利视频| 蜜桃av噜噜一区二区三区| 国产精品免费在线| 亚洲精品免费一区二区三区| 欧美亚洲免费电影| 亚洲精品久久| 久久青青草原一区二区| 欧美午夜激情在线| 亚洲久久一区二区| 久久免费99精品久久久久久| 9久草视频在线视频精品| 香蕉精品999视频一区二区| 久久久噜噜噜久久人人看| 亚洲精品男同| 巨胸喷奶水www久久久免费动漫| 久久er99精品| 欧美日韩一区二区视频在线| 在线观看日韩www视频免费| 亚洲欧美www| 亚洲精品精选| 免费在线观看精品| 国产欧美精品在线| 亚洲午夜在线| 日韩亚洲国产欧美| 欧美搞黄网站| 激情视频一区二区三区| 午夜精品国产更新| 一区二区久久久久久| 欧美理论在线| 中文精品视频| 亚洲精品极品| 欧美日韩国产精品| 一本一本久久| 亚洲精选久久| 欧美日韩精品伦理作品在线免费观看| 欧美激情一区二区三区蜜桃视频| 欧美韩国一区| 91久久精品国产91久久性色| 你懂的亚洲视频| 免费成人小视频| 亚洲人午夜精品免费| 亚洲黄色性网站| 欧美日韩在线视频一区| 亚洲一区二区三区在线观看视频 | 免费在线亚洲欧美| 欧美在线视频二区| 伊人激情综合| 欧美国产先锋| 欧美高清不卡在线| 亚洲少妇一区| 性欧美videos另类喷潮| 好吊日精品视频| 欧美mv日韩mv国产网站| 蜜臀久久99精品久久久画质超高清 | 国内精品伊人久久久久av影院 | 一区二区三区在线视频免费观看| 在线观看欧美亚洲| 免费中文日韩| 欧美另类专区| 欧美一区二区三区在线播放| 亚洲一区在线观看视频| 国产一区久久| 国产一区二区三区高清在线观看| 亚洲永久在线观看| 欧美精品在线网站| 性色av一区二区三区在线观看 | 久久久综合香蕉尹人综合网| 国内精品久久久久伊人av| 欧美sm视频| 国产精品www.| 男人插女人欧美| 欧美日韩在线看| 久久综合影视| 国产精品www网站| 欧美成人中文| 国产欧美日本| 亚洲国产经典视频| 国产偷国产偷亚洲高清97cao| 中国女人久久久| 亚洲欧美日本视频在线观看| 亚洲福利视频三区| 亚洲女同精品视频| 91久久精品网| 欧美亚洲免费电影| 亚洲手机在线| 免费成人黄色| 久久亚洲一区| 国产女精品视频网站免费| 亚洲国产免费| 在线观看不卡| 欧美在线首页| 欧美一区二区三区在线视频| 欧美人与性动交α欧美精品济南到| 在线观看成人av电影| 亚洲视频一区二区免费在线观看| 欧美日韩精品一区视频| 老牛影视一区二区三区| 国产精品激情偷乱一区二区∴| 亚洲免费在线电影| 欧美国产日产韩国视频| 欧美大片在线观看一区| 国产欧美一区在线| 亚洲一级二级| 亚洲欧美视频一区二区三区| 欧美日本一道本在线视频| 亚洲第一视频| 亚洲区第一页| 欧美电影免费观看| 亚洲电影网站| 亚洲久久成人| 欧美日韩成人免费| 99精品欧美一区二区三区综合在线| 欧美视频在线观看视频极品| 欧美高清不卡在线| 亚洲七七久久综合桃花剧情介绍| 一本色道久久加勒比精品| 亚洲精品乱码久久久久久黑人| 亚洲精品少妇网址| 99国内精品| 欧美性天天影院| 亚洲午夜久久久| 欧美在线视频一区二区| 国产亚洲精品久久久久久| 午夜久久一区| 男女激情久久| 国产精品久久久久aaaa樱花| 一区二区三区精品视频| 欧美精品三区| 99香蕉国产精品偷在线观看| 性伦欧美刺激片在线观看| 国产日韩欧美在线| 欧美一级黄色录像| 美女诱惑一区| 一本久久综合| 国产精品亚洲综合色区韩国| 欧美一区网站| 欧美激情一区二区三区在线视频 | 国产精品美腿一区在线看| 亚洲人午夜精品| 亚洲欧美视频在线| 伊人久久成人| 欧美日韩在线观看视频| 欧美一区中文字幕| 亚洲日本免费电影| 久久国产视频网| 亚洲精品在线视频观看| 国产精品裸体一区二区三区| 久久久久久久久岛国免费| 亚洲人人精品| 久久躁日日躁aaaaxxxx| 一本到高清视频免费精品| 国产日韩欧美视频在线| 欧美精品高清视频| 久久激五月天综合精品| 日韩香蕉视频| 免费在线观看日韩欧美| 亚洲欧美资源在线| 亚洲欧洲日本专区| 韩国成人福利片在线播放| 国产精品qvod| 欧美日韩大片一区二区三区| 欧美在线资源| 亚洲一二三区精品| 亚洲精品日日夜夜| 欧美激情aaaa| 久久综合九色综合久99| 亚洲欧洲99久久| 宅男噜噜噜66国产日韩在线观看| 欧美刺激午夜性久久久久久久| 久久不射2019中文字幕| 亚洲精品欧美一区二区三区| 国产一区亚洲| 国产精品网站在线播放| 欧美日韩国产综合视频在线观看中文 | 欧美视频一区二区三区…| 欧美自拍丝袜亚洲| 亚洲欧美国产制服动漫| 亚洲深夜福利|