专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
为什么要使用 malloc()是动态内存分配函数?
2019-07-16 07:55
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
嵌入式Linux
7290
5
1170
1、相对于自动分配内存,malloc()函数申请分配的内存地址有什么不同?
比如:
int x[100]
int * x = (int *)malloc(100 *sizeof(int))
二者之间的内存地址有什么区别?
求教,谢谢
2、C语言什么情况下需要用malloc来申请内存?求教,谢谢
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
zhifubao
1楼-- · 2019-07-16 09:13
一般ARM程序的RAM分为堆区、栈区、全局变量区,int * x = (int *)malloc(100 *sizeof(int))使用的堆区,int x[100] 如果是局部变量则使用栈区,如果是全局变量则使用全局变量区。
malloc这个函数作用是在堆区分配一个连续空间,可用来存放一些临时用的数据。需要时开辟,不需要时释放。
加载中...
Ansersion
2楼-- · 2019-07-16 14:04
本帖最后由 Ansersion 于 2018-6-26 23:03 编辑
就32位linux举例,系统启动之后就会在其0x00000000-0xFFFFFFFF地址空间留有一部分空间作为“堆”供程序动态申请。
这部分空间的最重要的特点是:大。
之所以说大:是相对于”栈“来说的。每个任务在创建之初都会分配一小点空间,你平时随便”int x; int i;“消耗的就是”栈“,显然我们不能直接就给一个任务1G的空间,那么别的任务吃啥呢?所以一般栈都比较小,根据系统配置而定。
其他系统,包括各种rtos也是一样的道理,虽然它们的内存普遍比较小,纵使是32位芯片,也没4G那么大的内存,但是”栈“和”堆“的设置是一样的原理。更小的系统完全可以不用动态分配内存,而且往往更稳定,毕竟操作内存是件费时而且容易出错的事情
加载中...
18842697583
3楼-- · 2019-07-16 16:05
自己的理解,供题主参考:
1、int x[] ,分配给x的内存空间是不可变的,大小不可变,也不能删除,要想删除只能改程序重新编译。
malloc(sizeof(x)), 系统分配的这个内存空间大小可变,不用的时候回收。
2、用处:1的对比可以看到,malloc 和 动态的,灵活的。可变的 相关。
我们可以假设这样一个例子,你的程序中 x[ ] 用来存储 你仓库中的零件,元素是零件种类 type。
a.用int x[100],type只能有100种,等你有800种零件的时候怎么办?改程序,把100改成800.
那你说,我开始就让 type 是1000。行是行,浪费资源。假设你只有有限的ram,你就要吝啬一些。
b. 用malloc(sizeof(*x)), 这种情况下你就不用预先设置type的上限值了。你type是多少,都能保证,x能分配到合适的内
存空间。 (实际上 int x[100] 也是做分配内存的操作对吧)
说的不严谨的地方还请指正。
加载中...
STC9051MCU
4楼-- · 2019-07-16 18:20
精彩回答 2 元偷偷看……
加载中...
liujinyi016
5楼-- · 2019-07-16 19:14
当你使用的内存的大小水确定时,要进行动态分配,否则分配大了就浪费了
加载中...
一周热门
更多
>
相关问题
ARM 汇编,怎么这个export这么捣乱啊?
1 个回答
【ALIENTEK 战舰STM32开发板例程系列连载+教学】第五十八章 UCOSII实验1-任务调度
38 个回答
什么情况下会导致 自恢复保险丝 阻值出现异常?
1 个回答
【提问题,赢课程】反激开关电源设计、变压器设计及调试课程问题搜集
2 个回答
nand启动文件大于4KB,怎么解决
1 个回答
学习ARM选ARM几比较好呢?
2 个回答
这两个板到底选谁?【我决不是发广告的】
1 个回答
关于以太网IP地址如何修改?
1 个回答
相关文章
嵌入式编译生成的HEX文件和BIN文件内容详解
0个评论
嵌入式领域,FPGA的串口通信接口设计,VHDL编程,altera平台
0个评论
IMX6UL裸机实现C语言按键输入实验
0个评论
如何编写一个工程文件夹下通用的Makefile
0个评论
Linux设备树专有名词及语法规则详解(下)
0个评论
嵌入式开发之GNU的汇编语法介绍
0个评论
嵌入式开发之Putty软件的安装和使用
0个评论
嵌入式开发之SecureCRT 软件安装和使用
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
嵌入式
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
malloc这个函数作用是在堆区分配一个连续空间,可用来存放一些临时用的数据。需要时开辟,不需要时释放。
就32位linux举例,系统启动之后就会在其0x00000000-0xFFFFFFFF地址空间留有一部分空间作为“堆”供程序动态申请。
这部分空间的最重要的特点是:大。
之所以说大:是相对于”栈“来说的。每个任务在创建之初都会分配一小点空间,你平时随便”int x; int i;“消耗的就是”栈“,显然我们不能直接就给一个任务1G的空间,那么别的任务吃啥呢?所以一般栈都比较小,根据系统配置而定。
其他系统,包括各种rtos也是一样的道理,虽然它们的内存普遍比较小,纵使是32位芯片,也没4G那么大的内存,但是”栈“和”堆“的设置是一样的原理。更小的系统完全可以不用动态分配内存,而且往往更稳定,毕竟操作内存是件费时而且容易出错的事情
1、int x[] ,分配给x的内存空间是不可变的,大小不可变,也不能删除,要想删除只能改程序重新编译。
malloc(sizeof(x)), 系统分配的这个内存空间大小可变,不用的时候回收。
2、用处:1的对比可以看到,malloc 和 动态的,灵活的。可变的 相关。
我们可以假设这样一个例子,你的程序中 x[ ] 用来存储 你仓库中的零件,元素是零件种类 type。
a.用int x[100],type只能有100种,等你有800种零件的时候怎么办?改程序,把100改成800.
那你说,我开始就让 type 是1000。行是行,浪费资源。假设你只有有限的ram,你就要吝啬一些。
b. 用malloc(sizeof(*x)), 这种情况下你就不用预先设置type的上限值了。你type是多少,都能保证,x能分配到合适的内
存空间。 (实际上 int x[100] 也是做分配内存的操作对吧)
说的不严谨的地方还请指正。
一周热门 更多>