完善资料让更多小伙伴认识你,还能领取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板卡-WiFi名称带空格导致WiFi连接不上
551 浏览 0 评论
飞凌ElfBoard ELF 板卡-6ULL Linux4.1.15文件系统关闭SSH
680 浏览 0 评论
创龙教仪基于瑞芯微3568的ARM Cortex A-55教学实验箱 适用于人工智能 传感器 物联网等领域
1818 浏览 1 评论
飞凌ElfBoard ELF 1板卡-如何在ELF 1开发板上实现对java的支持
1679 浏览 1 评论
搓一个J-Link OB-nRF5340-NordicSemi
1068 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 20:57 , Processed in 0.492951 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号