[C++] 内存填充与达夫设备

若要设置一块内存为指定值,最简单莫过于memset了,然而它要求pattern是一个字节,如果想设置一个宽点的类型,例如整型,那么memset基本就无法发挥功效,除非设置的是0或者-1或者其它值能满足所有字节一样。

 

下面提供几个方法,并大致比较一下:

1> 普通的for循环,一次设置数组各个元素为指定值

2> 滚动拷贝,1变2,2变4,4变8,越来越多……

3> Duff's Device, 达夫设备,是一个叫Duff的人发明的,将循环的比较次数降为1/8,将switch和while糅合在一起。

 

注意:所有函数都没有做参数检查,要求输入count必须大于0,否则会出错!

 

代码如下:

 

 

 

开了/O2优化,结果如下:

 

 

分析如下:

 

memcpy是被高度优化的(memsetPower中被调用),据说是用汇编写的,所以非常快,开不开/O2影响不大,而普通循环的影响很大,速度直逼memsetPower。而Duff's Device表现得非常令人吃惊,基本都是最快的。

 

当然我的环境可能有局限性,欢迎大家测试代码,找到最适合自己的方法。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值