LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: Illidan

有malloc和用数组的利弊

[复制链接]
 楼主| 发表于 2005-11-24 10:17:52 | 显示全部楼层
Post by zhllg
如果不考虑堆栈对齐,在32位机里
第一段将固定占用8个字节的堆栈空间
第二段将随数组的大小而变化,从8到68字节

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

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


比如有这种情况:

  1. char* struct_to_str( struct info mine );
  2. char* struct_to_str( struct info mine )
  3. {
  4. /*这里面我malloc一块合适的空间,最后return之。如果不用malloc,还有好的办法吗?*/
  5. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-11-24 13:40:40 | 显示全部楼层
如果需要在另外的函数中访问这块mem,恐怕只能用动态申请的方式了。
回复 支持 反对

使用道具 举报

发表于 2005-11-24 13:59:23 | 显示全部楼层
静态变量会用到stack,动态变量会用到heap。
有些地方,特别是嵌入式系统中stack很小(如:只有4K)。
如果一个函数中的一些局部变量很大。你就很容易死得莫名其妙。
因为函数调用时,局部变量全被放在了stack上,一但stack溢出,程序就死到不知道哪里去了。
如果你的这样的函数还用了递归调用,程序就会死得特别快。
所以,有些情况只能用malloc。
回复 支持 反对

使用道具 举报

发表于 2005-11-24 14:56:06 | 显示全部楼层
Post by masterdemon
静态变量会用到stack

是不是打错字了,本地变量吧
回复 支持 反对

使用道具 举报

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

本版积分规则

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