字节对齐的写法.
What I write, what I lose.
?
之前看到Nginx的code的時候.?看到一個關于字節對齊的實現.
突然想起之前去面試的時候, 別人讓我實現一個4字節對齊. 當然奇怪別人怎么問這種問題.
這時候開始有一點點體會.?
以下將個人總結的幾種寫法寫上.
#define common_align1(x) ((x/4+((x%4)?1:0))*4) #define common_align2(x) (((x>>2)+((x%4)?1:0))<<2) #define common_align3(x) ((x+3) &~(3)) #define common_align4(x) (((x+3)>>2)<<2) #define common_align5(x) (x%4?((x>>2)+1)<<2:x) int common_align6(x) { if(x%4 == 0) return x; else return (x/4+1)*4; }以上幾種, nginx和tcmalloc使用的是第3種. 個人面試中寫出大概是第6種.
以上幾種方法. 在虛擬機下測試過耗費時間.?
大概以第三種為費時100單位的話, 以上方法費時分別為 140, 130, 100, 106, 120, 150 .
高下立判.
其實個人覺得有意思的是.
1.想起之前的普文二. 那大概3是文藝青年, 1,2,4,5是普通青年. 2B青年給方法6或者是?((x/4+(x%4)?1:0)*4).
2.寫出方法6來作為面試嵌入式相關, 的確是該被鄙視.
?
謝謝.
轉載于:https://www.cnblogs.com/freezee/archive/2012/08/20/Alignment.html
總結
- 上一篇: 通俗地解释脏读、不可重复读、幻读
- 下一篇: 从Loagistic 到 SVM算法