Nic*_*ick 6 c++ memory optimization integer file
好吧,所以我在编写图像到JPEG之前编写了一个(相当未经优化的)程序,但是,现在我正在处理MPEG-2传输流和H.264编码视频.在我深入编程所有这些之前,我很好奇处理实际文件的最快方法是什么.
目前我正在将.mts文件文件映射到内存中以进行处理,虽然我不确定(例如)以块的形式将100 MB的文件读入内存并以这种方式处理它会更快.
这些文件需要大量的位移和读取标志,所以我想知道当我引用一些内存时,如果一个整数读取4个字节或作为一个字符读取1个字节更快.我以为我读过x86处理器优化到4字节粒度的地方,但我不确定这是否属实......
谢谢!
如果您需要同步提供文件,则内存映射文件通常是最快的可用操作.(有些异步API允许O/S有时重新排序以略微提高速度,但听起来它对您的应用程序没有帮助)
您使用映射文件获得的主要优点是,当O/S仍在从磁盘读取文件时,您可以在文件的内存中工作,并且您不必管理自己的锁定/线程文件读取码.
内存参考方面,无论您实际使用什么,x86内存都将一次读取整行.与非字节粒度操作相关联的额外时间指的是整数不需要字节对齐的事实.例如,如果事物没有在4字节边界上对齐,则执行ADD将花费更多时间,但对于像存储器复制这样的东西,将没有什么区别.如果你正在使用固有的字符数据,那么保持这种方式比以整数读取所有内容并且改变位置更快.
如果你正在进行h.264或MPEG2编码,那么在任何情况下,瓶颈可能都是CPU时间而不是磁盘i/o.