【发布时间】:2018-04-26 06:30:21
【问题描述】:
也就是说,为什么free()不只是将内存返回给操作系统,而malloc只是向操作系统请求内存?
这包含三个密切相关的问题:
- 为什么
C需要管理自己的堆? (是因为操作系统只允许您分配和释放最小大小的连续内存吗?) - 假设我在括号中写的是真的,为什么会这样?
- 此问题是否会影响操作系统本身,使其无法将内存块分配给任何正在运行的进程?
【问题讨论】:
-
首先,运行一个分析器并计算由简单的东西发出的
malloc()和free()调用的数量。然后意识到每个进程最终都会将它们作为系统调用...... -
操作系统是全国分销商,只处理大请求。您的程序(用
C或其他方式编写)是您当地的超市,可以为您提供少量内存。 -
这完全取决于操作系统。 [c] 标签中最不流行的标签实际上实现了自己的堆,而 CRT 只是直接使用它。这不是 Unix 的方式,在嵌入式系统中变得相当模糊。
-
首先,C 代码并不总是在操作系统之上运行。
-
假设存在操作系统是错误的。我使用 C 语言执行了许多在裸机上运行的软件项目。
标签: c heap-memory dynamic-memory-allocation virtual-memory