幻想完美主义

导航

字节对齐的写法.

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来作为面试嵌入式相关, 的确是该被鄙视.

 

谢谢.

posted on 2012-08-20 19:29  幻想完美主义  阅读(565)  评论(0编辑  收藏  举报