rle*_*lut 19 c c++ memory optimization
不久之前,我偶然发现了Alexandrescu的2001年DDJ文章:http: //www.ddj.com/cpp/184403799
它是关于比较各种方法来初始化缓冲区到某个值.就像"memset"对单字节值的作用一样.他比较了各种实现(memcpy,显式"for"循环,duff的设备),并没有真正找到所有数据集大小和所有编译器的最佳候选者.
引用:
所有这一切都有一个非常深刻和悲伤的认识.我们是在2001年,即Space Odyssey的一年.(...)开箱即用,看看我们 - 50年后,我们仍然不擅长填充和复制记忆.
编辑:我正在研究图像处理软件.我的数组项目是POD,每毫秒都很重要!
编辑2:感谢您的第一个答案,这里有一些额外的信息:
Rob*_*ker 10
DDJ文章承认memset是最好的答案,并且比他试图实现的要快得多:
关于C的内存操作函数memset,memcpy和memcmp有一些神圣不可侵犯的东西.它们很可能由编译器供应商高度优化,以至于编译器可能检测到对这些函数的调用并用内联汇编程序指令替换它们 - 这就是MSVC的情况.
因此,如果memset适合您(即您使用单个字节初始化),则使用它.
虽然每毫秒可能有效,但您应该确定在设置内存时丢失执行时间的百分比.考虑到您还有很多有用的工作,它可能非常低(1或2%??).鉴于优化工作可能会在其他地方获得更好的回报率.
| 归档时间: |
|
| 查看次数: |
5420 次 |
| 最近记录: |