malloc函数的用法举例(从操作系统内存管理来说,malloc申请一块内存的背后原理是什么)
本文目录
从操作系统内存管理来说,malloc申请一块内存的背后原理是什么
内存的一部分空间被用来保存页表,哪个页被使用了,哪个页空着,哪个页分给了哪个进程,内存管理单元mmu都会在页表里做记录。以4k为一页,意味着页地址数只是物理地址的4096分之一,各种查询法速度都够用了。程序内的地址是一个虚拟的连续地址,程序对虚拟地址的读写由mmu转换为对物理地址的读写。
操作系统在帮助程序初始化,分配了默认数量的页以后,就任凭程序折腾了。你用标准malloc函数管理也好,自己写个替代品也好,只要虚拟地址对应的物理地址已经分配给程序,都不需要操作系统插手。
一旦程序读写的虚拟地址没有对应的物理地址,mmu会抛出异常信号,暂停程序的运行,然后操作系统会填写页表,分配一个新的页面给程序,对于用户程序来说是感受不到这个过程的。
操作系统就好比一个坐拥半城的渣男,对每个女友(程序)都承诺全部的房产,然而实际只给一个小房子供程序使用管理(malloc)。哪个女友家具摆不下了,管家(mmu)马上通知渣男开个新房产证,于是用较少的资源维持了庞大的女友人数,倒是物尽其用。
c语言中malloc申请的空间和直接定义变量申请的空间有什么区别为什么要有malloc这种形式
有很大区别。根据以前的编程经验,要点有三点:一是空间分配的连续性;二是动态内存申请;三是防止程序执行中出现异常错误。
以下分别说明。
直接定义变量与malloc定义变量的编程含义;malloc事先分配好了内存空间。
在c语言中,malloc函数原型为void *malloc(unsigned int slong),其作用是在内存的动态存储区中分配一个长度为slong的连续空间。此函数的返回值是分配区域的起始地址,如:
char *p;
p=malloc(64000);//空间不够指针为null。
如果用数组定义:
char p,表示的是声明了一个数组,此数组的大小64000个字节。
但是,请注意要点:
系统这时并没有为其分配内存。只是在使用时才分配。
动态内存申请与释放,确保内存的正确使用。
比如,我们在控制系统中,经常要对用户输入的一段零件程序、一个图象文件进行解释、识别,那么首先要做的,是将此文件装入内存中,执行完成后,立即释放。这就需要malloc及free了。延用上面的定义:
fread(p,64000,1,fp);
fclose(fp);
free(p);
要点是随时申请,用完释放。
如果不用malloc,直接定义,在大型软件开发中,一般会导致程序执行异常,出现不可控的结果。
在前两点,都用到char p及malloc(64000)。
很多初学者,为了省事,喜欢用char p这样的定义。这样最容易出现bug,尤其是当p指针越大时,出现问题几率越大。
这是因为,对于p把其它变量空间覆盖了。
在VC、VS中,情况要稍好,因为管理的内存足够大。
总结:在大型软件开发中,如果不用malloc,直接定义数组,一般会导致程序执行异常,出现不可控的结果。
对于超过1000字节的数组空间,建议用malloc/free,以确保数组变量的绝对正确;小的空间,直接用数组定义即可。
更多文章:

calm寓意(calm 这单词什么意思还有它的反义词是什么)
2025年3月21日 03:40

易语言辅助论坛(请问想学写游戏脚本,是学易语言还是学按键精灵)
2025年3月18日 14:40

python中float的用法(python怎么float转成int)
2025年3月19日 17:00

permanently的意思(英文单词permanetly是什么意思啊!)
2025年2月19日 19:00

cocktail lounge是什么意思(lounge是什么意思)
2025年2月15日 22:20

在C语言中 z=x>y x: y; 这个表达式是什么意思啊,求解?if(i=a<ba:b;i>0;i--)啥意思
2025年3月29日 11:50

scanf返回值被忽略是怎么回事(忽略scanf的返回值要怎么改pta)
2025年3月18日 18:00

python怎么读取txt文件(在python中如何调用txt文件中的某一列数据)
2025年3月17日 13:20

帝国cms首页模板修改(各位大虾,小弟问一个弱弱的问题帝国CMS怎么修改首页标题图片,要多久才能被百度收录)
2025年3月30日 22:00

fedora14 32bit(fedora 14该下载那个文件)
2025年2月11日 23:50

delphi和python(Delphi,易语言,c++,JAVA,Python到底学哪个更好,我想找一门深入学习)
2025年3月17日 15:30

怎么改变电脑鼠标样式(请问如何改变电脑上屏幕显示出的鼠标的形状)
2025年3月12日 02:40

Android下xml文件存储的位置,菜鸟问题,求大神解决?c#每分钟读取一次xml文件,具体怎么做本人菜鸟
2025年2月28日 13:50

工作流平台系统(计算机高手解释一下 工作流系统 (Workflow systems))
2025年2月10日 18:10