为什么要使用 malloc()是动态内存分配函数?

2019-07-16 07:55发布

1、相对于自动分配内存,malloc()函数申请分配的内存地址有什么不同?比如:
int x[100]
int * x = (int *)malloc(100 *sizeof(int))
二者之间的内存地址有什么区别?求教,谢谢


2、C语言什么情况下需要用malloc来申请内存?求教,谢谢

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
Ansersion
2019-07-16 14:04
本帖最后由 Ansersion 于 2018-6-26 23:03 编辑

就32位linux举例,系统启动之后就会在其0x00000000-0xFFFFFFFF地址空间留有一部分空间作为“堆”供程序动态申请。
这部分空间的最重要的特点是:大。
之所以说大:是相对于”栈“来说的。每个任务在创建之初都会分配一小点空间,你平时随便”int x; int i;“消耗的就是”栈“,显然我们不能直接就给一个任务1G的空间,那么别的任务吃啥呢?所以一般栈都比较小,根据系统配置而定。

其他系统,包括各种rtos也是一样的道理,虽然它们的内存普遍比较小,纵使是32位芯片,也没4G那么大的内存,但是”栈“和”堆“的设置是一样的原理。更小的系统完全可以不用动态分配内存,而且往往更稳定,毕竟操作内存是件费时而且容易出错的事情
内存分布.PNG

一周热门 更多>