Java最新堆区的动态内存分配:malloc—calloc—realloc—柔性数组,蚂蚁金服4面Java高级开发

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

ptr = (int*)malloc(num*sizeof(int));

if(NULL != ptr)//判断ptr指针是否为空

{

int i = 0;

for(i=0; i<num; i++)

{

*(ptr+i) = 0;

}

}

free(ptr);//释放ptr所指向的动态内存

return 0; }

calloc

该函数的功能是开辟num大小为size的空间空间,并且把空间的每个字节初始化为0。

int main()

{

int *p = calloc(num, sizeof(int));

if(NULL != p)

{

//使用空间

realloc

realloc函数是让动态内存的管理更加灵活。

就是为了在我们申请空间的时候,会发现我们申请的太大了或者太小了,为了更加合理大小对其作出调整。realloc函数就可以做到。

返回的为调整之后的内存起始位置。

在调整大小的基础上,会将原来数据移动到新的空间。

**realloc会存在俩种情况。

1.原有空间之后有足够大的空间。

2.原有空间之后没有足够大的空间。**

情况1: 当是情况1 的时候,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。

情况2: 当是情况2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。 由于上述的两种情况,realloc函数的使用就要注意一些。 举个例子:

#include<stdio.h>

#include<stdlib.h>

int main()

{

int *ptr = malloc(100);

if (NULL != ptr)

{

//业务处理

}

else

{

exit(EXIT_FAILURE);

}

//realloc函数运用

//代码一

ptr = realloc(ptr, 1000);

//代码二

int *p = NULL;

p = realloc(ptr, 1000);

if (p != NULL)

{

ptr = p;

}

//业务处理

free(ptr);

return 0;

}

**PS:

一定不要忘记释放空间,不然会造成严重的内存泄漏。**

柔性数组

结构中的最后一个元素允许是未知大小的数组。

如:

typedef struct st_type

{

int i;

int a[0];//柔性数组成员

}type_a;

//或者

typedef struct st_type

{

int i;

int a[];//柔性数组成员

}type_a;

特点:

  • 结构中的柔性数组成员前面必须至少一个其他成员。

sizeof 返回的这种结构大小不包括柔性数组的内存。

包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应

柔性数组的预期大小。

柔性数组的使用及其优势;

最后

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

更多JVM面试整理:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

fKF-1715429876581)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值