189 8069 5689

c语言free函数的原理 c语言free函数的作用

如何从计算机硬件的角度理解C语言的free()这个函数

可以从两个角度解释一下, 一个是使用者的角度,对于使用者,free函数就是解除指针和一个地址的对应关系,这个和硬件关系不大。另外一个角度是实现free这个函数的角度,这个和内存地址的管理有一定的关系,通常你通过maalloc得到的内存地址所指向的物理空间不一定是连续的,可能对应一片分散的物理区域,当你释放这些内存时,这些分散的物理空间需要被重新排列,组合,以备下次高效的分配。

作为一家“创意+整合+营销”的成都网站建设机构,我们在业内良好的客户口碑。成都创新互联公司提供从前期的网站品牌分析策划、网站设计、网站设计、成都网站设计、创意表现、网页制作、系统开发以及后续网站营销运营等一系列服务,帮助企业打造创新的互联网品牌经营模式与有效的网络营销方法,创造更大的价值。

C语言中是如何释放内存单元的;原理又是什么?

C管理内存大致可以理解为两种,分配在栈上的,一个是分配在堆上的。

临时变量,动态变量,分配在栈上,运行完,直接弹出栈,就没了。

分配在堆上的内存,释放的时候,基本上可以理解为,指针不指这里了。也就失去了对这块内存的控制。其实所谓的释放。字面意思容易让人理解错。

有些机器有些操作系统,会在释放的时候清空这段内存,但是这种做法效率不高,但是安全,很少有机器这么做,多数都是所谓释放,就是不让你控制这块内存了而已。

求大神解惑C语言free函数工作原理?

首先肯定你的主动思考,学习的主动性

然后明确说,malloc/free有多种不同的实现,可以认为都是采用第二种办法,或者变相采用第二种办法。

首先说静态变量行不通,不太可能只调用一次malloc,调第二次就覆盖掉了,行不通。

一般的实现,是把分配内存的长度等信息放在malloc来的指针的前面,用一个小结构来记录分配的大小以及状态信息,想要查证也不难,去下载一些源代码阅读一下就行。

至于你说的释放最近一次分配的内存,是另一个话题,涉及到内存泄漏。

举个小片段:

char *a = (char *)malloc(100);

a = (char *)malloc(100);

free(a);

分配了两次,只能free最后一次分配的,前一次分配的,丢掉了,找不回来。

这个最后一次,指的是这个意思


当前名称:c语言free函数的原理 c语言free函数的作用
文章地址:http://cdxtjz.cn/article/doososg.html

其他资讯