使用 fstream 时,是否将文件的所有内容加载到内存中?
When using the fstream is all the file's content loaded into memory?
我的观点是,当使用fstream::open打开文件时,所有文件的内容都加载到内存中?当你对一个文件进行读写时你实际上是在内存中做这些操作还是有很多磁盘访问?
一般来说,打开文件时不会将文件的全部内容读入内存。
例如,如果是这种情况,1gb的文件将自动加载到内存中。这需要一段时间。此外,您的平台还需要1GB的可用内存。
也可能是一种浪费。如果您只想要第一个文本行或前64个字节,那么在这种情况下,读取1GB文件将浪费时间和内存。
可能发生了一些缓冲。例如,驱动程序可以从硬盘驱动器读取目录表并存储到内存中。
让我们看另一种情况,如果我想打开一个文件进行写操作,是否有必要将整个文件读入内存?
很可能,驱动程序在打开文件时不会将整个文件读入内存。您需要告诉驱动程序读取数据并将数据放在哪里。
iostream库的一般设计有两种类型的io对象;流对象本身,以及流缓冲区对象。流对象主要关心格式;比如将long数转换为十六进制,被告知输出十六进制,等等;但是他们真的不太关心他们在哪里写。流缓冲区忽略格式方面,而关注与某些设备(文件、字符串、控制台等)的交互。流对象只是有指向适当的流缓冲区对象的指针,并在实际的io操作中遵从它们。在fstream对象的情况下,使用的流缓冲区对象是filebuf (basic_filebuf对char流的专门化)。
缓冲对象的整个设计都围绕着从缓冲区读取或写入缓冲区的概念,并及时将读取和写入事件挂钩到空缓冲区,尽管它们也可以以无缓冲的方式运行。这些缓冲区是c++本身定义的;如果由您的实现使用,则它们与总文件大小无关。如果它们保存整个文件,那只是因为文件适合它们选择的缓冲区长度。
- 原子加载和存储与内存顺序放宽
- 如何从内存缓冲区加载张量流图
- 我在 IDA 或 dbg 或 olly 上看到的内存是否与我在 RAM 上实时加载的内存相同?
- 从C/C++(Win64)中的内存加载64位DLL
- 对外部函数的调用是否强制从内存加载
- 将使用 4 或 8 个对齐规则将加载处理到内存中
- C++:类如何将自身加载到内存中以递增全局变量?
- 加载字节数组(从内存)到libpng c
- 将内存保存到文件并加载它而不必解析数据?
- 加载时间,遍历时间,不同数据段C/C 的内存使用率
- 急切地加载整个模型以估计张量流的内存消耗
- 延迟加载的 DLL 在内存中彼此相距太远
- 使用 DX11 加载 2D 纹理时内存泄漏
- 如何在单独的线程上加载纹理到主内存并使用它在另一个线程上渲染
- 使用C++原子库,我应该使用什么样的内存顺序进行加载,然后进行比较交换
- 当某些错误可以接受时,顺序加载存储原子的内存顺序应该是什么
- 从内存而不是URL动态加载QML
- sqlite3数据库加载到内存c++并选择perfomance
- 从Magick++图像中加载内存(libharu)中的图像
- 无法从eclipse(C++/CDT)中指定的地址加载内存