C学习:内存分配之malloc函数和alloca函数辨析

C学习:内存分配之malloc函数和alloca函数辨析

简单总结下这两个函数的本质区别,具体的使用方法可去参考资料做进一步研究。

相同点


  • 都是动态分配,根据实际运行情况动态分配的内存,而非一开始就分配
  • 返回类型相同,都是返回的内存起始地址
  • 内存连续,一次调用后,分配的内存都是逻辑连续的
  • 调用相同,输入参数都是申请内存的byte数

不同点


  • 内存分区不同,malloc分配的是堆区内存,需要手动free;alloca分配的是栈区内存,程序自动释放;(注意,栈空间有限仅几kb左右,堆空间远大于栈空间)
  • 作用域不同,malloc分配的内存全局可用(类似全局变量),alloca分配的内存仅当前函数可用(类似局部变量)
  • 可移植性不同,malloc是C标准库函数<stdlib.h>里的,可移植通用;alloca在"malloc.h"里,不具有可移植性,一般禁用

补充


  • alloca(): Allocation,分配一个连续栈内存
  • malloc(): Memory Allocation,分配一个连续堆内存
  • calloc():Clear Allocation,与malloc的最大区别就是分配后的内存默认初始化清零
  • realloc():Reset Allocation,给已分配的堆内存重新调整大小

参考资料


  1. 基于栈的内存分配 —— alloca
  2. 菜鸟教程:C++ 动态内存
  3. 怎样深入理解堆和栈
  4. 扩展:malloc和calloc区别
  5. C语言calloc()函数:分配内存空间并初始化
C语言世界 文章被收录于专栏

C语言学习总结分享

全部评论

相关推荐

家人们,我现在真的好纠结。我是26届的,目前还没有实习过。我现在的情况是,想参加秋招,但是感觉自己的简历特别空,没有实习经历会不会秋招直接凉凉啊?可我又听说现在很多公司对26届实习生也不太感冒,说什么不确定性大。而且我最近在准备考公,时间上也有点冲突。要是把时间花在实习上,备考时间就少了。但要是不实习,又怕以后就业有问题😫有没有懂行的友友帮我分析分析:26届现在不实习,秋招找工作真的会很难吗?考公和实习该怎么平衡啊?如果现在不实习,考完公再去找实习还来得及吗?真的太焦虑了,希望大家能给我点建议🙏
小破站_程序员YT:我可能和大家的观点不一样。人的精力是有限的,不能既要还要。你又想实习又想考公最后又要秋招上岸,我觉得哪有那么多的选择。你如果想考上岸,那就全力以赴。如果想秋招上岸,就继续投实习,投没了,就继续准备秋招,秋招不行继续春招。别到最后,考公没上岸,觉得是花了时间浪费在找实习上了, 秋招没上岸,觉得是浪费时间准备考公去了。我是认为很难说可以去平衡 不喜勿喷,可以叫我删除
点赞 评论 收藏
分享
秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-25 20:45
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务