社区
C语言
帖子详情
malloc分配的内存是连续的吗?与calloc有什么本质区别?calloc从哪分配内存
ls251544415
2010-11-09 09:07:29
malloc从堆上分配内存
资料上说,而堆中的内存不是连续的,是以链表形式存在的
还有calloc是从哪里分配的内存?堆or栈?
calloc分配一片连续的存储空间,并全部清零。
如果malloc分配的内存也是连续的,那么calloc因为多个清零的功能而被设计出来,不是有点多此一举吗?
...全文
1243
9
打赏
收藏
malloc分配的内存是连续的吗?与calloc有什么本质区别?calloc从哪分配内存
malloc从堆上分配内存 资料上说,而堆中的内存不是连续的,是以链表形式存在的 还有calloc是从哪里分配的内存?堆or栈? calloc分配一片连续的存储空间,并全部清零。 如果malloc分配的内存也是连续的,那么calloc因为多个清零的功能而被设计出来,不是有点多此一举吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gucasaoe1234
2011-08-25
打赏
举报
回复
学习了~~
xuwening
2010-11-10
打赏
举报
回复
[Quote=引用 2 楼 jim_king_2000 的回复:]
1、malloc分配的内存是连续的。
2、堆中的内存不一定是连续的。而是一块一块以链表的形式存在的。而链表中的每一个节点(即一块)都是连续的。
3、分配算法是,找到合适大小的一块,分配给用户,如果没有,则把大块的切正两小块。用户释放后,需要进行小块内存的合并。
4、不要小看calloc的清零功能,它是经过优化的,你自己清零不会比它快。
[/Quote]
说的太明白了~~~~~~~~~~~
旭子
2010-11-10
打赏
举报
回复
操作系统段页式保护, 使得段连续页不连续
在标准库再次基础上在抽象了一层,标准库内有自己的内存分配设计,malloc 本身就实现了内存分配池,以应付频繁的小块内存申请和释放,而不需要每次都返回内核,从而提高性能。
东大坡居士
2010-11-09
打赏
举报
回复
[Quote=引用 2 楼 jim_king_2000 的回复:]
1、malloc分配的内存是连续的。
2、堆中的内存不一定是连续的。而是一块一块以链表的形式存在的。而链表中的每一个节点(即一块)都是连续的。
3、分配算法是,找到合适大小的一块,分配给用户,如果没有,则把大块的切正两小块。用户释放后,需要进行小块内存的合并。
4、不要小看calloc的清零功能,它是经过优化的,你自己清零不会比它快。
[/Quote]
学习了~~~~~~~~
ischarles
2010-11-09
打赏
举报
回复
p= calloc(m, n) 等价于 p = malloc(m*n); memset(p, 0, m*n);
也就是说,calloc除了分配内存外还做了
把分配的区域初始化为0
的工作
沭水河畔
2010-11-09
打赏
举报
回复
[Quote=引用 3 楼 lhcwjy 的回复:]
malloc和calloc都是从堆从分配一块连续的内存。它们的功能是一样的,只是参数不同。
[/Quote]
alloca是从栈上分配,无需free。
The alloca() function allocates size bytes of space in the stack frame of the
caller. This temporary space is automatically freed when the function that called
alloca() returns to its caller.
白云飘飘飘
2010-11-09
打赏
举报
回复
malloc和calloc都是从堆从分配一块连续的内存。它们的功能是一样的,只是参数不同。
Jim_King_2000
2010-11-09
打赏
举报
回复
1、malloc分配的内存是连续的。
2、堆中的内存不一定是连续的。而是一块一块以链表的形式存在的。而链表中的每一个节点(即一块)都是连续的。
3、分配算法是,找到合适大小的一块,分配给用户,如果没有,则把大块的切正两小块。用户释放后,需要进行小块内存的合并。
4、不要小看calloc的清零功能,它是经过优化的,你自己清零不会比它快。
BruCe1107
2010-11-09
打赏
举报
回复
类似于char* buffer = new char[100];
malloc
和
calloc
区别
malloc
和
calloc
区别
函数
malloc
()和
calloc
()都可以用来动态
分配
内存
空间,但两者稍有
区别
。
malloc
()函数有一个参数,即要
分配
的
内存
空间的大小: void *
malloc
(size_t size);
calloc
()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要
分配
的
内存
空间的大小。 void *
calloc
(size_t numElements,size_t sizeOfElement);
calloc
和
malloc
的
区别
本文叙述了
calloc
和
malloc
用法的
区别
,函数
malloc
()和函数
calloc
()的主要
区别
是前者不能初始化所
分配
的
内存
空间,而后者能。
C语言
malloc
()与
calloc
()的区
C语言
malloc
()与
calloc
()的区
malloc
,realloc,
calloc
的总结.xlsx
个人总结各类博客和资料里关于
malloc
,
calloc
,realloc的对比
C语言中
malloc
,
calloc
,realloc的
区别
C语言中
malloc
、
calloc
、realloc的
区别
(1)C语言跟
内存
分配
方式 <1>从静态存储区域
分配
.
内存
在程序编译的时候就已经
分配
好,这块
内存
在程序的整个运行期间都存在.例如全局变量、static变量. <2>在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈
内存
分配
运算内置于处理器的指令集中,效率很高,但是
分配
的
内存
容量有限. <3>从堆上
分配
,亦称动态
内存
分配
. 程序在运行的时候用
malloc
或new申请任意多少的
内存
,程序员自己负责在何时用free或delete释放
C语言
69,382
社区成员
243,074
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章