好的,所以我之前编写了一个(相当未经优化的)程序来将图像编码为 JPEG,但是,现在我正在处理 MPEG-2 传输流和其中的 H.264 编码视频。在开始对所有这些进行编程之前,我很好奇处理实际文件的最快方法是什么。
目前我正在将 .mts 文件文件映射到内存中以对其进行处理,尽管我不确定(例如)将 100 MB 文件分块读入内存并处理它是否会更快方式。
这些文件需要大量的位移位等读取标志,所以我想知道当我引用一些内存时,一次读取 4 个字节作为整数或 1 个字节作为字符是否更快。我以为我在某处读到 x86 处理器已优化为 4 字节粒度,但我不确定这是否属实...
谢谢!
最佳答案
如果您需要文件同步可用,内存映射文件通常是可用的最快操作。 (有一些异步 API 允许 O/S 重新排序,有时会稍微提高速度,但这听起来对您的应用程序没有帮助)
使用映射文件的主要优势在于,当操作系统仍在从磁盘读取文件时,您可以在内存中处理该文件,并且您不必管理自己的锁定/线程文件读取代码。
在内存引用方面,在 x86 内存上,无论您实际使用什么,都将一次读取整行。与非字节粒度操作相关的额外时间指的是整数不需要字节对齐的事实。例如,如果事物未在 4 字节边界上对齐,则执行 ADD 将花费更多时间,但对于内存复制之类的事物,差别不大。如果您正在处理固有的字符数据,那么保持这种方式比将所有内容都读取为整数并进行位移要快得多。
如果您正在执行 h.264 或 MPEG2 编码,瓶颈可能是 CPU 时间而不是磁盘 i/o 在任何情况下。
关于c++ - 哪个在内存中更快,int 或 char?还有文件映射或 block 读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2590163/