各位大神,你们好:
小弟最近用C语言编程遇到这样一个问题(代码比较多,就不粘了,见谅):
在子函数A中用malloc申请内存,在调用函数A的B函数中释放申请的内存。重复运行100次函数B,发现:在函数B中若不释放A的申请的内存,每次A运行的时间基本一样,而内存占用量持续上升;若在函数B中释放A申请的内存,占用内存问题解决了,然后每次调用A的时间又持续上升。
完全没有搞明白这是个什么情况,你们怎么看?
已采纳
C语言内存释放与调用子函数时间变长
- 写回答
- 好问题 提建议
- 追加酬金
- 关注问题
微信扫一扫
分享- 邀请回答
6条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
rjp203 2016-05-17 13:52最佳回答 专家已采纳堆上的内存申请和释放一定要一一对应,用完就需要释放,不然那块空间就一直被占用着无法再次利用,时间上升的问题可能是你重复申请释放,使得堆内存碎片过于零碎,堆内存管理器内部有个数据结构保存着各块可使用内存空间的大小,每次申请堆内存,内部都会根据你要申请的大小去给你分配空间,如果堆内存过于零碎,就有可能造成分配时间的延长,如果是项目中实际需要频繁的调用和释放堆内存,建议自己建立一个堆内存池进行利用(也就是你自己先预先申请一块足够大的堆内存空间,内部管理这块空间的使用)。
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
查看更多回答(5条)
报告相同问题?
提交
相关推荐 更多相似问题
- 2016-05-17 13:24回答 6 已采纳 堆上的内存申请和释放一定要一一对应,用完就需要释放,不然那块空间就一直被占用着无法再次利用,时间上升的问题可能是你重复申请释放,使得堆内存碎片过于零碎,堆内存管理器内部有个数据结构保存着各块可使用内存
- 2019-05-17 12:24回答 2 已采纳 ## 正确代码 ``` #include "pch.h" #include #include int d[4] = { 0,0,0,0 }; int ddd() { char x
- 2021-11-16 22:14回答 3 已采纳 整形相除的结果还是整形,把分母改为2.0,即转换为double类型即可。 (1+2)/2 改为 (1+2)/2.0 函数的声明与定义返回值要改为float类型 float Average(inta
- 2018-05-25 11:06hmxz1024的博客 可变参数的函数通在参数列表的末尾使用省略号(…)定义。 举例如下: #include<stdarg.h> #include<stdio.h> int sum(int, ...);...
- 2021-09-22 11:17流楚丶格念的博客 函数调用模型1. 函数调用流程函数调用流程分析函数参数调用代码分析自右向左入栈顺序的优点2. 调用惯例函数参数的传递顺序和方式栈的维护方式调用管理表3. 函数变量传递分析分析图 1. 函数调用流程 &...
- 2019-06-09 16:11happylzs2008的博客 1、概述 C标准中有一个默认参数提升(default argument promotions)规则。...本文结合C语言的可变长参数函数来说明默认参数提升存在的陷阱。 2、默认参数提升的定义 标准中的定义如下: Ifthe...
- 2022-03-08 20:36回答 1 已采纳 #include<stdio.h> void print(int b[], int len) { int i; for (i = 0; i < len;
- 2021-10-01 23:00回答 1 已采纳 fun缺乏返回语句,试着在fun内定义char result[20];将所有的字符串赋值给result ,最后在fun内最后加入返回语句 return result;
- 2021-06-24 16:17回答 1 已采纳 简单点,把这个head指针设为全局变量就行了
- 2018-05-24 10:48华哥-2088的博客 C语言内存分布原文章在这里:https://blog.csdn.net/love_gaohz/article/details/41310597一.在学习之前我们先看看ELF文件。ELF分为三种类型:.o 可重定位文件(relocalble file),可执行文件以及共享库(shared ...
- 2021-05-22 00:37普林西斯的博客 关于C语言函数返回一个数组c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意:1、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。可以是全局变量,...
- 2021-05-13 02:44喵小逗的博客 system()函数功能强大,很多人用却对它的原理知之甚少先看linux版system函数的源码:#include #include #include #include int system(const char * cmdstring){pid_t pid;int status;if(cmdstring == NULL){return ...
- 2019-12-16 19:22回答 1 已采纳 这时候当然需要写num,当你写num[1000]你传递的是num数组下标为1000的元素,你数组访问越界了,最大下标为999。你可以学习了c语言的指针再来回顾这个问题。 现在按照课本教程的规范来就行
- 2021-06-22 14:39回答 2 已采纳 8 就是将每个字符的ASCII码减去'0'的ASCII码求和。'2'-'0'=2,如此类推
- 2022-03-01 23:55回答 4 已采纳 #include <stdio.h> int fac(int n); int fun(int m, int n); void main() { int m, n; wh
- 2022-03-02 21:40謓泽的博客 在C语言中,子程序是由一个主函数和若干个函数构成的。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。 函数可以提高软件的开发效率,在main函数当中调用其它函数这些...
- 2021-11-21 22:18kikokingzz的博客 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于...
- 2021-05-26 00:41麦子与海的博客 概念迭代(iteration)是重复反馈过程的活动,其目的通常是...而递归函数顾名思义,这个函数运用了递归这个方法。个人理解迭代:通过循环不断重复一个过程,这个过程是一个或若干个旧值通过该过程获得一个或若干个新值...
- 2022-03-02 00:22回答 2 已采纳 16 17行的void删掉调用函数不需要加类型,你这样写它会认为你写的是函数声明
- 2016-08-02 11:50wolfrevoda的博客 源地址 1、概述C标准中有一个默认参数...本文结合C语言的可变长参数函数来说明默认参数提升存在的陷阱。2、默认参数提升的定义标准中的定义如下:If the expression that denotes the called function has a type that
- 没有解决我的问题, 去提问