gpt4 book ai didi

c - 当我打开文件时会发生什么(RAM 和 ROM 很重要)

转载 作者:行者123 更新时间:2023-12-04 02:24:46 26 4
gpt4 key购买 nike

我想到了这个问题,因为我正在努力加快我的程序。

我从文件中读取数据,并且像往常一样使用经典的:

FILE *fp;
fp=fopen("c:\\test.txt", "r");

FILE 指针包含一个我不太了解的结构。

主要问题是: 当我执行 fopen我以某种方式将文件放入 RAM,或者每次使用文件指针时它都会从 HD 读取它?

操作系统:Linux Mint,gcc 编译器

最佳答案

返回的指针是指向黑盒结构的指针。你不应该理解实际的结构,只是如何使用指向它的指针。

至于发生了什么,fopen函数动态分配此结构(例如通过 malloc )并返回一个指针。该结构存储在虚拟内存中,它可能在 RAM 中或交换中(如果您启用了交换)。指针本身存储在编译器存储变量的任何位置(例如堆栈上的局部变量,其他地方的全局变量)。无论变量存储在哪里,它都像结构一样存储在虚拟内存中,只是在另一个地方。

然后是文件处理操作。默认情况下,所有文件流都被缓冲,这意味着当您尝试从 FILE 读取任何内容时指针,您调用的函数将读入私有(private)缓冲区,并将该缓冲区的一部分返回给您(或多个缓冲区副本,如果您想读取的内容超过内部缓冲区可以容纳的内容)。这个缓冲区也存储在虚拟内存中,不知道在哪里。

在较低级别,操作系统也有自己的缓冲,但它存储在操作系统专用的内存中。操作系统甚至可能有多个缓冲区。

至于所有这些缓冲区的存储位置,它会在物理 RAM 中的某个位置,但它不在您的控制之下,对于您作为应用程序程序员而言,这并不重要。您创建自己的缓冲区,例如询问fread用文件中的数据填充它,这就是你作为初学者真正需要知道的一切。

关于c - 当我打开文件时会发生什么(RAM 和 ROM 很重要),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23202074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com