【发布时间】:2014-02-01 14:13:43
【问题描述】:
1. File *fp;
2. fp = fopen ("/etc/myfile.txt", "w");
3. fclose(fp);
现在
在语句 1 中,为指针创建了一个 4 字节的内存,类型为 'FILE' 在堆栈上。
在语句 2 中,内存 = 'sizeof(FILE)' 在堆上分配,其地址分配给指针 'fp'。
有人可以对语句 2 进行更多解释。我们是否为所有文件分配相同的堆大小?操作系统如何知道它应该分配的 FILE 的大小?
在低级别,st 2 中究竟发生了什么。
【问题讨论】:
-
FILE *结构与您认为的任何实际文件无关。它只是一个描述符结构,操作系统稍后会使用它来对文件执行 I/O。它的大小是恒定的,与它所描述的文件的大小完全无关。 -
@H2CO3:准确地说,操作系统不使用
FILE;而是由 C 库使用(至少,对于类似 Linux 的操作系统是这样)。操作系统本身使用通过系统调用提供的文件描述符。 -
@OliCharlesworth 是的,太糟糕了,我现在无法编辑我的评论。当然它是由标准库使用的。
标签: c memory-management