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

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 笨笨 閱讀(3020) 評論(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| 欧美中在线观看| 亚洲精品1区| 国产精品捆绑调教| 欧美日韩国产成人在线观看| 久久久久国产精品www| 亚洲视频图片小说| 亚洲毛片一区| 亚洲国产高清在线观看视频| 久久精品免费观看| 欧美一区影院| 午夜视频久久久| 亚洲视频每日更新| 一区二区欧美在线观看| 亚洲激情网站免费观看| 禁久久精品乱码| 国产一区二区精品在线观看| 国产精品区一区二区三| 欧美亚洲成人精品| 欧美日韩高清不卡| 欧美日韩精品不卡| 欧美人与禽性xxxxx杂性| 免费影视亚洲| 久久人人爽人人爽| 午夜在线不卡| 亚洲欧美日本伦理| 午夜亚洲性色视频| 亚洲欧美综合国产精品一区| 99精品欧美一区二区三区综合在线| 亚洲激情一区二区| 亚洲国产视频一区| 亚洲黄网站在线观看| 欧美成黄导航| 欧美自拍偷拍午夜视频| 新片速递亚洲合集欧美合集| 亚洲小说欧美另类婷婷| 中国女人久久久| 亚洲午夜在线视频| 亚洲无限av看| 亚洲免费视频网站| 午夜精品久久久久久久99樱桃| 亚洲在线观看免费| 午夜宅男久久久| 久久精品99| 久久久精品欧美丰满| 欧美在线不卡| 久久久国产成人精品| 久久精品中文字幕一区| 久久黄金**| 欧美伊人影院| 欧美在线观看一区| 久久综合狠狠综合久久综合88 | 久热综合在线亚洲精品| 蜜桃久久精品一区二区| 欧美国产一区二区三区激情无套| 欧美激情在线有限公司| 欧美肉体xxxx裸体137大胆| 国产精品久久波多野结衣| 国产精品热久久久久夜色精品三区| 国产麻豆综合| 在线播放中文字幕一区| 亚洲第一精品久久忘忧草社区| 国产在线精品一区二区中文| 在线日韩av片| 亚洲视频一区二区在线观看| 香蕉免费一区二区三区在线观看| 久久久久久9| 欧美激情欧美狂野欧美精品| 99re亚洲国产精品| 亚洲无玛一区| 卡通动漫国产精品| 国产精品wwwwww| 伊人婷婷欧美激情| 日韩写真视频在线观看| 亚洲欧美国产毛片在线| 男同欧美伦乱| 亚洲天堂男人| 老司机午夜精品视频在线观看| 欧美日韩三级在线| 国产日韩欧美在线观看| 在线观看一区| 亚洲欧洲99久久| 欧美大片在线看| 亚洲无线视频| 欧美成人免费全部观看天天性色| 欧美性片在线观看| 亚洲第一精品电影| 亚洲欧美久久久| 欧美高清视频在线观看| 亚洲欧洲在线免费| 久久精品一区四区| 麻豆精品视频在线| 欧美激情1区2区| 亚洲国产成人精品久久久国产成人一区| 中国av一区| 欧美高清视频一区二区三区在线观看| 国产日韩av一区二区| 99视频一区二区三区| 久久国产精品99国产精| 99re66热这里只有精品3直播| 欧美一区二区精美| 国产精品www网站| 亚洲精品一区二区三区四区高清| 久久九九久精品国产免费直播| 午夜精品久久久久久99热| 亚洲青色在线| 欧美黑人在线播放| 亚洲欧洲日本一区二区三区| 欧美在线观看视频| 欧美国内亚洲| 在线免费观看欧美| 欧美在线3区| 亚洲一区二区三区国产| 欧美日本网站| 亚洲九九精品| 亚洲高清免费| 欧美.日韩.国产.一区.二区| 久久精品二区亚洲w码| 久久久久久久波多野高潮日日| 欧美一级午夜免费电影| 欧美性感一类影片在线播放| 亚洲精品免费在线观看| 午夜日韩av| 亚洲男女自偷自拍| 欧美亚洲第一页| 亚洲图片你懂的| 99国产精品久久久久久久久久 | 性色av一区二区三区| 亚洲第一精品在线| 国产亚洲一级高清| 欧美一区二区视频网站| 午夜精品视频在线| 国产精品久久久久久超碰| 亚洲一级特黄| 亚洲一区二区在线视频| 国产精品久久久久三级| 香蕉久久夜色精品国产| 亚洲自啪免费| 狠狠88综合久久久久综合网| 麻豆成人精品| 久久久久久综合| 曰韩精品一区二区| 亚洲人www| 久久深夜福利| 日韩视频在线一区| 蜜臀va亚洲va欧美va天堂| 亚洲欧美国产精品桃花| 久久全国免费视频| 在线观看中文字幕不卡| 午夜精品久久久久久久蜜桃app| 欧美成人黄色小视频| 久久精品一区二区| 亚洲国产高清一区| 亚洲精品久久久久久下一站 | 野花国产精品入口| 一区二区三区久久| 国产一区二区精品久久| 欧美一区二区三区免费视频| 午夜一区二区三区在线观看 | 亚洲福利视频网站| 欧美视频专区一二在线观看| 欧美一级网站| 美女视频黄a大片欧美| 一本久久a久久免费精品不卡| 亚洲一区二区三区在线| 影音欧美亚洲| 一区二区激情视频| 国语自产偷拍精品视频偷 | 亚洲三级电影在线观看| 久久一区精品| 亚洲欧美电影在线观看| 久久久不卡网国产精品一区| 亚洲国产精品一区制服丝袜 | 国产精品99久久久久久久vr| 亚洲自拍16p| 亚洲日韩成人| 性欧美办公室18xxxxhd| 亚洲美女在线观看| 性视频1819p久久| 日韩一区二区免费高清| 欧美一区二区三区久久精品| 亚洲精品在线观看免费| 亚洲在线观看视频网站| 亚洲三级视频在线观看| 亚洲综合精品| 日韩亚洲精品电影| 久久国内精品自在自线400部| 在线亚洲欧美视频| 老司机精品福利视频| 午夜精品久久久久久99热| 欧美激情精品久久久久久大尺度| 久久成人精品无人区| 欧美三区不卡| 欧美激情在线观看| 精品不卡一区| 亚洲欧美日韩一区二区|