日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

手工实现字节对齐 及 代码质量思考

發(fā)布時(shí)間:2025/5/22 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手工实现字节对齐 及 代码质量思考 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?在游戲編程中,我們經(jīng)常聽到序列化這個(gè)詞匯。在一些網(wǎng)絡(luò)通訊和數(shù)據(jù)處理時(shí),我們便會(huì)用到序列化。這里先不具體說明序列化。這里只說序列化過程中可能用到的字節(jié)對(duì)齊的問題:

?

我們首先是定義了這樣一個(gè)宏:

?

#define ALIGN( __size, __bits ) ?( ( ( ( __size - 1 ) >> __bits ) + 1 ) << __bits )

?

我們?cè)谑褂玫臅r(shí)候:

?DWORD dwSize = ALIGN( dataSize, 2 );

?

這樣傳入一個(gè)2,表示4字節(jié)對(duì)齊. ?假如我的dataSize = 10; ?通過這個(gè)宏我們可以算出dwSize = 12;

這種方法相對(duì)來說用得比較巧妙,當(dāng)然可能還有其他更好的方法, 我們這里不追究. 這里主要想說說我自己的一些感悟而已.

?

最初的想法我可能會(huì)把這個(gè)宏給寫成這樣:

#define ALIGN( __size, __bits ) ( ( __size % __bits == 0 ) ? __size : ( ( ( __size / __bits ) + 1 ) * __bits ) )

?

這樣雖然實(shí)現(xiàn)了功能, 但是總體來說還是麻煩了.. 不說追求完美. 至少應(yīng)該在準(zhǔn)備著手寫的時(shí)候多想一下還有沒有其他更簡(jiǎn)單高效的辦法.

?

之前也碰到過一些東西, 比如你在一個(gè)函數(shù)中調(diào)用另外一個(gè)函數(shù). 另外一個(gè)函數(shù)是事先別人已經(jīng)寫好的. 你恰好又要在被調(diào)函數(shù)里獲取你主調(diào)函數(shù)里面計(jì)算出來的一個(gè)值. 這時(shí)你可能第一個(gè)想法就是給函數(shù)加一個(gè)參數(shù). 為了跟其他地方兼容就加一個(gè)默參. 這樣當(dāng)然是好的..但是有的時(shí)候你可能并不這么想. 你可能會(huì)去把這個(gè)計(jì)算的值給添加成被調(diào)函數(shù)的所在類的成員里面去. 這樣一個(gè)臨時(shí)用來做判斷的值, 你就無形之間增加了類的負(fù)擔(dān). 特別是在服務(wù)器的嚴(yán)謹(jǐn)邏輯下, 都這樣寫的話將造成很多浪費(fèi)..

?

再舉一個(gè)例子吧, 假如我們有一個(gè)玩家組隊(duì)的隊(duì)伍數(shù)組. 里面都是玩家對(duì)象. 我們一個(gè)玩家退出了隊(duì)伍. 我們就得刪除這個(gè)玩家在數(shù)組中的數(shù)據(jù). 這時(shí)我們會(huì)怎么做呢?

我們是不是要遍歷到玩家的索引,然后刪除,然后把后面的玩家依次往前移動(dòng)一個(gè)單位呢? 對(duì),想法是對(duì)的,落實(shí)的話我們可以考慮一下了. 到底要循環(huán)多少次? 需不需要循環(huán)?

我們便可以找到答案:

先遍歷找到玩家的索引,比如用index表示, 玩家數(shù)組用playerArray, 之后我們就可以這樣:

if ( index < MAX_TEAM_PLAYER - 1 )

{

? ? memcpy( playerArray[ index ], playerArray[ index + 1 ], sizeof(?playerArray[ index + 1 ] ) * (?MAX_TEAM_PLAYER - index - 1 )? ) ;

}

memset( playerArray[ MAX_TEAM_PLAYER - 1 ], 0, sizeof( playerArray[ MAX_TEAM_PLAYER - 1 ] ); ? // 這句不能忘喲 - -

?

這樣是不是就簡(jiǎn)單些了? 當(dāng)然這里只是舉的簡(jiǎn)單的例子..更多的還是需要我們?nèi)ンw會(huì)..這里只是提出思考..有什么地方說的不對(duì)望指教..

轉(zhuǎn)載于:https://blog.51cto.com/masefee/814060

總結(jié)

以上是生活随笔為你收集整理的手工实现字节对齐 及 代码质量思考的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。