这个问题出现在我脑海中,因为我试图加快我的计划。
我从文件中读取数据,像往常一样,我使用经典:
FILE *fp;
fp=fopen("c:\\test.txt", "r");
FILE指针包含一个我不太了解的结构。
主要问题是:当我执行fopen
时我把文件放到RAM中,或者每次我使用文件指针时都从HD读取它?
操作系统:Linux Mint,gcc编译器
答案 0 :(得分:3)
返回的指针是指向黑盒结构的指针。你不应该理解实际的结构,只是如何使用它的指针。
至于发生了什么,fopen
函数动态分配这个结构(通过e..g malloc
)并返回一个指针。结构存储在虚拟内存中,可能位于RAM或交换中(如果已启用交换)。指针本身存储在编译器存储变量的地方(例如堆栈上的局部变量,其他地方的全局变量)。无论变量存储在何处,它都存储在虚拟内存中,就像结构一样,只是在另一个地方。
然后是文件处理操作。默认情况下,所有文件流都是缓冲,这意味着当您尝试从FILE
指针读取任何内容时,您调用的函数将读入私有缓冲区,并返回给您一部分该缓冲区(或多个缓冲区副本,如果您想要读取超过内部缓冲区可以容纳)。此缓冲区也存储在虚拟内存中,未知位置。
在较低级别,操作系统也有自己的缓冲,但它存储在操作系统专用的内存中。操作系统甚至可能有多个缓冲区。
关于存储所有这些缓冲区的位置,它将存在于物理RAM中,但它不在您的控制之下,对于您作为应用程序编程人员而言,它并不重要。你创建自己的缓冲区,例如fread
用文件中的数据填充它,这是您作为初学者真正需要知道的全部内容。