C语言中的静态和动态开辟内存的对比

C语言中程序员操作比较频繁的是栈空间和堆空间。

方法执行会入栈,执行结束出栈,在此过程中会涉及到变量(别名)在内存中的存储和销毁;示例代码如下:

    //1 在栈中开辟空间,不用自己释放
	int num = 9;
	//2 使用malloc在堆空间中开辟内存,需要手动释放
	int* arr = (int*)malloc(4);
	printf("arr由malloc开辟内存空间,地址为%p\n",arr);
	int* arr_new = realloc(arr, 8);
	printf("arr_new由realloc在arr的基础上扩展的内存空间,地址为%p\n",arr_new);
	if (arr_new) { // arr_new != null 非0即true
		free(arr_new);
		arr_new = NULL;//不执行此操作,会arr_new 会变成 悬指针
	}
	else {
		free(arr);
		arr = NULL;
	}

    

    执行结果:
    arr由malloc开辟内存空间,地址为014CE030
    arr_new由realloc在arr的基础上扩展的内存空间,地址为014CE030

        其中realloc是在原先内存空间上的再扩展,它存在两种情况:①在原有的内存上追加,此时arr和arr_new指针存储的内存地址一样。②如果新开辟的空间过大,无法在原有的基础上扩展,会copy原有的空间到新开辟的空间中,并且释放原由的内存空间;这种情况下arr和arr_new的内存地址是不一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值