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

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 笨笨 閱讀(3003) 評論(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.   回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区| 欧美国产成人精品| 国产一区二区0| 国产精品久久久久9999| 欧美视频在线观看 亚洲欧| 欧美日韩综合| 国产精品亚洲综合一区在线观看| 国产视频亚洲| 1024精品一区二区三区| 亚洲国产色一区| 正在播放亚洲| 久久精品国产91精品亚洲| 麻豆精品网站| 亚洲精品午夜精品| 亚洲女同精品视频| 免费成人高清在线视频| 欧美日韩在线直播| 国产综合精品| 一区二区三区偷拍| 久久久.com| 日韩亚洲一区在线播放| 欧美一区二区三区在线观看视频 | 午夜伦欧美伦电影理论片| 久久久久国产免费免费| 欧美午夜一区二区| 136国产福利精品导航| 亚洲一区影院| 欧美电影免费观看高清完整版| 一本久久综合亚洲鲁鲁| 久久综合色影院| 国产欧美精品一区二区色综合| 亚洲日本激情| 麻豆国产精品va在线观看不卡| 在线午夜精品自拍| 欧美韩日一区二区三区| 狠狠入ady亚洲精品| 午夜精品美女自拍福到在线| 91久久国产精品91久久性色| 国产精品99久久久久久人| 欧美大胆成人| 国产欧美一区二区三区沐欲 | 亚洲国产日韩在线一区模特| 午夜视频在线观看一区二区三区 | 亚洲青色在线| 久久在线观看视频| 午夜精品久久久久久久男人的天堂| 欧美黄色aa电影| 亚洲国产精品成人久久综合一区| 久久精品国产精品亚洲综合| 一区二区久久久久| 欧美日韩免费高清| 日韩亚洲欧美综合| 亚洲欧洲精品一区二区三区不卡 | 久久亚洲欧洲| 国产主播喷水一区二区| 欧美伊人精品成人久久综合97 | 亚洲性av在线| 国产精品成人一区二区三区吃奶 | 欧美影院在线| 国产日韩欧美成人| 久久九九国产| 久久精品国产综合精品| 激情视频亚洲| 免费在线亚洲欧美| 欧美成人69av| 亚洲视频一二区| 一区二区三区 在线观看视| 欧美日韩视频专区在线播放 | 国产精品一区在线播放| 亚洲欧美日韩国产综合在线 | 亚洲精品一线二线三线无人区| 欧美日本中文字幕| 亚洲一区二区在线免费观看视频| 一区二区三区四区五区视频| 欧美无砖砖区免费| 欧美日本一道本| 久久伊人亚洲| 久热精品视频在线| 亚洲人在线视频| 亚洲乱码国产乱码精品精天堂| 久久激情一区| 在线视频免费在线观看一区二区| 一区二区av| 国产精品视频1区| 亚洲综合色丁香婷婷六月图片| 久久精品视频免费播放| 亚洲激情在线激情| 欧美日韩亚洲一区二区| 性欧美大战久久久久久久免费观看| 欧美一区二区三区四区视频 | 国产色产综合产在线视频| 久久精品国产精品亚洲精品| 久久综合九色99| 亚洲视频一二三| 久久国产精品99精品国产| 亚洲人成77777在线观看网| 99精品福利视频| 一区二区三区在线视频免费观看 | 欧美精品自拍| 欧美一区=区| 每日更新成人在线视频| 亚洲午夜一区二区三区| 久久精品一本久久99精品| 99热免费精品在线观看| 欧美一区二视频| 制服丝袜亚洲播放| 久久免费精品视频| 午夜精品成人在线视频| 欧美激情一二三区| 久久综合图片| 国产欧美日本| 一本一道久久综合狠狠老精东影业 | 欧美在线免费看| 中文国产亚洲喷潮| 久久综合久色欧美综合狠狠| 亚洲欧美日韩国产一区二区| 欧美黄色免费网站| 老鸭窝91久久精品色噜噜导演| 国产精品激情| 黄色精品一区二区| 久久九九99| 欧美国产激情二区三区| 久久国产精品电影| 国产精品国产三级国产专播精品人| 欧美电影在线播放| 久久国产精品久久国产精品| 午夜精品久久| 国产精品二区三区四区| 亚洲精品一区中文| 一本色道久久综合亚洲精品高清| 久久婷婷亚洲| 久久麻豆一区二区| 国产精品一二一区| 亚洲香蕉网站| 欧美在线播放一区| 国产亚洲一级| 久久黄色网页| 久久亚洲一区二区| 伊伊综合在线| 久久午夜色播影院免费高清| 久久视频一区二区| 亚洲第一网站| 欧美高清视频在线播放| 亚洲激情六月丁香| 亚洲精品一区二区在线| 美女主播视频一区| 欧美福利在线| 99视频精品全国免费| 欧美精品色一区二区三区| 亚洲人成亚洲人成在线观看| 亚洲精品一区二区三区婷婷月| 欧美高清在线视频| 亚洲美女免费视频| 午夜精品理论片| 国产亚洲亚洲| 久久一二三区| 亚洲电影av| 一区二区三区高清不卡| 欧美色欧美亚洲另类二区 | 亚洲黄色成人网| 一区二区动漫| 国产麻豆午夜三级精品| 欧美在线视频免费播放| 欧美黄色免费网站| 亚洲欧美激情四射在线日 | 亚洲电影第1页| 欧美激情欧美狂野欧美精品| 一区二区三区不卡视频在线观看| 欧美一区二区三区视频在线| 国产一区二区三区黄视频| 麻豆视频一区二区| 亚洲一级一区| 亚洲第一福利社区| 亚洲欧美日韩国产成人| 红桃视频成人| 欧美日精品一区视频| 欧美在线视频观看| 99精品视频免费在线观看| 久久久久久久激情视频| 中文高清一区| 亚洲国产一区二区三区高清| 国产精品老女人精品视频| 裸体丰满少妇做受久久99精品| 一区二区三区视频在线| 欧美成人精品| 久久国产福利国产秒拍| 久久永久免费| 噜噜噜噜噜久久久久久91| 9色国产精品| 尹人成人综合网| 欧美亚洲成人精品| 欧美成人中文字幕| 久久国产精品久久久久久电车| 亚洲国产精品第一区二区| 久久9热精品视频| 亚洲欧美日韩网| 一区二区久久| 亚洲日韩欧美一区二区在线| 一区二区三区在线高清| 国产一区二区三区黄视频|