个人对于动态开辟内存的一些认知

日期:2023-12-5

一:个人认为使用动态开辟内存的优势

(1)可以控制内存的大小:

            动态开辟内存可以自由根据用户需求调节内存空间,既可以保证数据不会溢出,也能保证不会浪费多余的内存空间。

(2)不占用栈区的内存

           动态开辟内存是向堆区申请了一个连续的并且比较大的内存空间,动态内存分配的空间是在堆区申请的,不是在栈区申请的。

           如果是在栈区定义了变量,而且每个变量分配内存时,又存在一定的间隙,容易造成了定义的变量足够多时,空隙也会很多,即变相地浪费了申请的内存空间。而使用动态开辟内存,是向系统申请一个自由变化空间所以动态内存在堆区申请,就完全不必担心栈区的空间不够的问题。

二:个人在调用动态申请内存时遇到的一些问题和思考

 (1)开辟步骤

动态数组开辟:

void *malloc(unsigned size)

if ((p = (int*)malloc(n*sizeof(int))) == NULL)

{ printf("Not able to allocate memory. \n");

exit(1); } 

动态数组开辟并初始化:void *calloc(unsigned n, unsigned size)

内存释放:void free(void *ptr)

内存分配调整:void *realloc(void *ptr, unsigned size)

注意:malloc()对所分配的存储块不做任何事情;calloc()对整个区域进行初始化。

(2)开辟差异和理解上的侧重点

a = malloc(sizeof(int));

a =(int *) calloc(n,sizeof(int));

这两者的差别不仅仅是函数的不同,其中后者有强制类型转换,而前者没有

实际上在C语言的标准上,有无强制类型转换都是行的(当然在c++必须将强制类型转换)

因为无论是calloc还是malloc,他们的返回值都是void* ,这里的void*实际上可以转换为int*类型或者其他类型,就是说返回的指针是兼容所有类型的万能指针。

指向void型的指针可以指向任意类型的对象,是一种特殊类型的指针。


 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值