鱼C论坛

 找回密码
 立即注册
查看: 2199|回复: 3

[已解决]C语言malloc分配内存空间是从哪里分配?

[复制链接]
发表于 2023-4-19 23:55:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C语言malloc分配内存空间是从哪里分配?
是从电脑的内存条里的内存分配还是电脑硬盘磁盘内存分配呢?或者是其他?
求详细解释!
最佳答案
2023-4-20 09:25:32
a905448839 发表于 2023-4-20 09:01
那为什么我的电脑运行内存16G 分配出19G的内存空间了呢?

因为在有现代操作系统的环境里 malloc 一般是从程序的虚拟内存空间里分配的的空间
在向操作系统请求更多虚拟内存的时候操作系统可能会表示已经分配,但直到请求的内存实际被写入之前都不会真的把某块物理内存提供给这个进程
虚拟内存也允许交换,使程序实际可使用的内存空间可能大于物理内存大小,例如通过将没有在使用的内存块临时存放在磁盘上,待需要使用时再加载回物理内存(可能伴随着将另一块放到磁盘上来腾出空间)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-20 00:44:51 | 显示全部楼层
在C语言中,使用malloc函数分配内存空间是从计算机的内存(RAM)中进行分配的,而不是从硬盘(磁盘)中分配。下面是关于malloc函数以及内存分配的详细解释:

malloc是C语言中用于动态内存分配的函数,它是memory allocation的缩写。当你调用malloc函数时,操作系统会根据你的请求在计算机的内存中分配一块连续的空间,然后返回指向该内存块起始地址的指针。

内存分配有两种主要类型:静态内存分配和动态内存分配。

  • 静态内存分配:在编译时确定内存的分配,例如全局变量和局部变量。这种分配方式在程序执行期间内存大小不会改变。
  • 动态内存分配:在程序运行时根据需要分配内存。malloc就是动态内存分配的一种方式。这种分配方式可以在程序运行期间根据需要调整内存大小。


动态内存分配使用的内存来自计算机的内存(RAM),因为RAM能够提供更快的读写速度,适合程序的运行。硬盘(磁盘)主要用于存储数据,比如文件、程序等。硬盘的读写速度相对较慢,不适合作为程序运行时的内存使用。

总结:C语言的malloc函数分配的内存空间是从计算机的内存(RAM)中分配的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-20 09:01:10 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-4-20 00:44
在C语言中,使用malloc函数分配内存空间是从计算机的内存(RAM)中进行分配的,而不是从硬盘(磁盘)中分配 ...

那为什么我的电脑运行内存16G 分配出19G的内存空间了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-20 09:25:32 | 显示全部楼层    本楼为最佳答案   
a905448839 发表于 2023-4-20 09:01
那为什么我的电脑运行内存16G 分配出19G的内存空间了呢?

因为在有现代操作系统的环境里 malloc 一般是从程序的虚拟内存空间里分配的的空间
在向操作系统请求更多虚拟内存的时候操作系统可能会表示已经分配,但直到请求的内存实际被写入之前都不会真的把某块物理内存提供给这个进程
虚拟内存也允许交换,使程序实际可使用的内存空间可能大于物理内存大小,例如通过将没有在使用的内存块临时存放在磁盘上,待需要使用时再加载回物理内存(可能伴随着将另一块放到磁盘上来腾出空间)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表