国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C語(yǔ)言中switch的別樣硬核玩法

2020-07-30 16:13 作者:C語(yǔ)言基礎(chǔ)  | 我要投稿


前言

本文主要介紹的是C語(yǔ)言中switch的別樣玩法,這是很多學(xué)習(xí)C語(yǔ)言的人基本都沒(méi)有見(jiàn)過(guò)的一個(gè)冷知識(shí),雖然不是很常用,但是希望對(duì)于廣大讀者學(xué)習(xí)C語(yǔ)言有一些幫助。


switch別致寫法

如果你是第一次看到的話,不妨試一下,看你能得出該寫法的作用嗎?相信大家寫業(yè)務(wù)邏輯的時(shí)候,都是面向if、else、for、while、switch編程。但是你見(jiàn)過(guò)switch嵌套do..while嗎?

咋的一看,這啥鬼玩意啊,switch/while這組合能編譯通過(guò)嗎?您可別懷疑,還真能。這個(gè)就是達(dá)夫設(shè)備不信的同學(xué)可以拿代碼去測(cè)試一下。

達(dá)夫設(shè)備(Duff's Device)

百度百科的說(shuō)法:

在計(jì)算機(jī)科學(xué)領(lǐng)域,達(dá)夫設(shè)備(英文:Duff‘s device)是串行復(fù)制(serial copy)的一種優(yōu)化實(shí)現(xiàn),通過(guò)匯編語(yǔ)言編程時(shí)一常用方法,實(shí)現(xiàn)展開(kāi)循環(huán),進(jìn)而提高執(zhí)行效率。這一方法據(jù)信為當(dāng)時(shí)供職于盧卡斯影業(yè)的湯姆·達(dá)夫于1983年11月發(fā)明,并可能是迄今為止利用C語(yǔ)言switch語(yǔ)句特性所作的最巧妙的實(shí)現(xiàn)。

簡(jiǎn)單的來(lái)說(shuō):達(dá)夫設(shè)備是一個(gè)加速循環(huán)語(yǔ)句的C編碼技巧。?其基本思想是減少循環(huán)測(cè)試的執(zhí)行次數(shù)。

在盧卡斯影業(yè)上班的程序員?Tom Duff,他是想為了加速一個(gè)實(shí)時(shí)動(dòng)畫(huà)程序,實(shí)現(xiàn)從一個(gè)數(shù)組復(fù)制數(shù)據(jù)到一個(gè)寄存器這樣一個(gè)功能,一般情況下,若要將數(shù)組元素復(fù)制進(jìn)存儲(chǔ)器映射輸出寄存器,很多人都會(huì)想到使用如下寫法:

do { ?*to = *from++; }?while(--count?>?0);

我們一般使用用for循環(huán)或者while循環(huán)的時(shí)候,如果執(zhí)行循環(huán)內(nèi)容本身用不了多少時(shí)間,本質(zhì)上時(shí)間主要是消耗在了每次循環(huán)的比較語(yǔ)句上邊。而事實(shí)上,比較語(yǔ)句是有很大優(yōu)化空間的,我們假設(shè)你要循環(huán)10000次,結(jié)果你從第一次開(kāi)始就不斷的比較是否達(dá)到上界值,這是不是很徒勞呢?我們寫一個(gè)達(dá)夫設(shè)備的函數(shù)就不會(huì)有這樣的情況(不同測(cè)試會(huì)有不同效果,大家可以自行測(cè)試一下)

知道了解即可

達(dá)夫設(shè)備確實(shí)縮短了不少時(shí)間,值得一提的是,針對(duì)串行復(fù)制的需求,標(biāo)準(zhǔn)C語(yǔ)言庫(kù)提供了memcpy函數(shù),而其效率不會(huì)比斯特勞斯魯普版的達(dá)夫設(shè)備低,并可能包含了針對(duì)特定架構(gòu)的優(yōu)化,從而進(jìn)一步大幅提升執(zhí)行效率。所以呢,這個(gè)東西你知道了解即可。

結(jié)束語(yǔ)文章都是手打原創(chuàng),每天最淺顯的介紹C語(yǔ)言、C++,windows知識(shí),喜歡我的文章就關(guān)注一波吧,每天帶你學(xué)習(xí)C/C++不同的知識(shí),也可以看到最新更新和之前發(fā)表的文章哦。


C語(yǔ)言中switch的別樣硬核玩法的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
嘉祥县| 高清| 西青区| 长寿区| 平安县| 唐河县| 东乌| 托里县| 贵州省| 苏州市| 华宁县| 肥乡县| SHOW| 溧阳市| 安岳县| 正阳县| 运城市| 新丰县| 普宁市| 新化县| 长宁县| 正蓝旗| 崇明县| 开江县| 五华县| 斗六市| 寻乌县| 韶山市| 治县。| 北流市| 益阳市| 常熟市| 久治县| 汾阳市| 南昌县| 陆丰市| 汕尾市| 沁阳市| 芷江| 武城县| 名山县|