LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1550|回复: 13

有malloc和用数组的利弊

[复制链接]
发表于 2005-10-26 22:02:27 | 显示全部楼层 |阅读模式
在定义一个函数时用以下两段代码会有什么区别(length的平均值在0-63范围)?

  1. char *copy;
  2. size_t length;
  3. copy = (char *) malloc (length + 1);
复制代码



  1. size_t length;
  2. char copy[length+1];
复制代码
发表于 2005-10-27 09:32:04 | 显示全部楼层
如果写这段程序的人有足够的能力的话,区别就是使用 malloc 需要额外的开销。
回复 支持 反对

使用道具 举报

发表于 2005-10-27 16:02:15 | 显示全部楼层
如果不考虑堆栈对齐,在32位机里
第一段将固定占用8个字节的堆栈空间
第二段将随数组的大小而变化,从8到68字节

malloc本身就需要时间执行
如果是动态连接,可能还要花符号解析的时间
还需要free

所以如果不需要在别的函数里访问这个数组
并且不需要改变这个数组长度的话
首选第二段代码
回复 支持 反对

使用道具 举报

发表于 2005-10-27 16:59:13 | 显示全部楼层
是不是 4 个字节?

还有,C99 支持变长数组。
回复 支持 反对

使用道具 举报

发表于 2005-10-27 18:05:04 | 显示全部楼层
有了C99, many `malloc' tricks deprecated.
malloc的话记得free.
回复 支持 反对

使用道具 举报

发表于 2005-10-27 18:13:07 | 显示全部楼层
Post by manphiz
many `malloc' tricks deprecated.

what do you mean by that?
thx in advance
回复 支持 反对

使用道具 举报

发表于 2005-10-27 18:22:12 | 显示全部楼层
Post by zhllg
what do you mean by that?
thx in advance

就是说很多原来必须使用malloc的地方在有了C99的变长数组后可以被取代而成为废弃的用法(deprecated)。其实大家都知道 共同学习
回复 支持 反对

使用道具 举报

发表于 2005-10-28 20:40:41 | 显示全部楼层
gcc 4.0支持 变长数组么?
回复 支持 反对

使用道具 举报

发表于 2005-10-28 20:57:39 | 显示全部楼层
of course
gcc -std=c99
回复 支持 反对

使用道具 举报

发表于 2005-10-29 12:16:49 | 显示全部楼层
http://gcc.gnu.org/c99status.html
不懂E文,好像还没完全实现。
回复 支持 反对

使用道具 举报

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

本版积分规则

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