免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 8285 | 回复: 32
打印 上一主题 下一主题

[C] 问一下直接声明和自己malloc的区别? [复制链接]

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-13 14:09 |只看该作者 |倒序浏览
本帖最后由 fender0107401 于 2010-12-13 14:55 编辑

如果我把某个局部变量声明为一个指针然后每次都malloc,那么是不是开销很大呢?

如果我直接声明一个变量,每次函数调用的时候就能直接使用了,是不是开销很小呢?

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
2 [报告]
发表于 2010-12-13 14:12 |只看该作者
本帖最后由 fender0107401 于 2010-12-13 14:22 编辑

就是说,这两个的开销一样吗?

  1. int *p=NULL;
  2. p=malloc(sizeof(int));
复制代码

  1. int a=0.0;
  2. int *p;
  3. p=&a;
复制代码

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
3 [报告]
发表于 2010-12-13 14:16 |只看该作者
我打算拿p当参数传递出去,

当然不是指向一个int这么简单了,我实际是指向一个很复杂的struct,而且这个函数需要被调用很多次。

论坛徽章:
0
4 [报告]
发表于 2010-12-13 14:17 |只看该作者
现在的cu充斥着这样的月经贴,一点营养都没有,去g一下c的堆和栈.

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
5 [报告]
发表于 2010-12-13 14:18 |只看该作者
能不malloc的就不用malloc

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
6 [报告]
发表于 2010-12-13 14:21 |只看该作者
也就是说通过“直接声明一个变量”和“malloc”这两种方式来获得内存,哪个的成本低?

论坛徽章:
0
7 [报告]
发表于 2010-12-13 14:26 |只看该作者
我觉得先malloc一大堆内存块,再缓存使用

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
8 [报告]
发表于 2010-12-13 14:29 |只看该作者
现在的cu充斥着这样的月经贴,一点营养都没有,去g一下c的堆和栈.
samlumengjun 发表于 2010-12-13 14:17


什么叫月经贴阿?

论坛徽章:
0
9 [报告]
发表于 2010-12-13 14:36 |只看该作者
据说男人也有更年期

论坛徽章:
0
10 [报告]
发表于 2010-12-13 14:41 |只看该作者
malloc是动态分配,内存是在堆区分配的,分配内存时需要在堆区分配,耗时较大,因为内存管理操作的缘故,分配的内存需要手动析构;静态分配时,存储区是在栈里分配的,耗时相对小,因为该操作只需要移动栈指针就行,分配的内存自动析构。
总结就是:如果变量有局部性、知道其大小、且存储区无须变动时,使用静态分配,否则动态分配

个人总结,如有疏漏,望指正

评分

参与人数 1可用积分 +10 收起 理由
fender0107401 + 10

查看全部评分

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP