完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、相对于自动分配内存,malloc()函数申请分配的内存地址有什么不同?比如:
int x[100] int * x = (int *)malloc(100 *sizeof(int)) 二者之间的内存地址有什么区别?求教,谢谢 2、C语言什么情况下需要用malloc来申请内存?求教,谢谢
|
|
相关推荐
11个回答
|
|
一般ARM程序的RAM分为堆区、栈区、全局变量区,int * x = (int *)malloc(100 *sizeof(int))使用的堆区,int x[100] 如果是局部变量则使用栈区,如果是全局变量则使用全局变量区。
malloc这个函数作用是在堆区分配一个连续空间,可用来存放一些临时用的数据。需要时开辟,不需要时释放。 |
|
|
|
本帖最后由 Ansersion 于 2018-6-26 23:03 编辑
就32位linux举例,系统启动之后就会在其0x00000000-0xFFFFFFFF地址空间留有一部分空间作为“堆”供程序动态申请。 这部分空间的最重要的特点是:大。 之所以说大:是相对于”栈“来说的。每个任务在创建之初都会分配一小点空间,你平时随便”int x; int i;“消耗的就是”栈“,显然我们不能直接就给一个任务1G的空间,那么别的任务吃啥呢?所以一般栈都比较小,根据系统配置而定。 其他系统,包括各种rtos也是一样的道理,虽然它们的内存普遍比较小,纵使是32位芯片,也没4G那么大的内存,但是”栈“和”堆“的设置是一样的原理。更小的系统完全可以不用动态分配内存,而且往往更稳定,毕竟操作内存是件费时而且容易出错的事情 |
|
|
|
|
|
|
|
第一个是分配在bss段,是静态内存分配。malloc申请的是放在堆内存里面。malloc申请的内存在不用的时候可以释放的。一般在初始化结构体指针变量时需要用到malloc()申请内存
|
|
|
|
当你使用的内存的大小水确定时,要进行动态分配,否则分配大了就浪费了
|
|
|
|
不错,很好的经验分享,感谢
|
|
|
|
说的 不错,可以加深一下理解,,
|
|
|
|
前面的地址是固定的了,是编译器分配的
|
|
|
|
后面的是动态的分配的,地址可能是不一样的,每次申请都是不同的地址
|
|
|
|
如果内存的容量大,可以用第一种,否则使用第二种的方式
|
|
|
|
如果内存的容量大,可以用第一种,否则使用第二种的方式
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程介绍之烧写所需镜像
124 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写方法
506 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
710 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核源代码的目录结构和文件说明
634 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介
1225 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 16:37 , Processed in 0.714456 second(s), Total 97, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号