Android 下 JNI 开发

本文深入探讨了静态内存和动态内存分配的概念,通过代码示例解析了两者在C语言中的实现方式。静态内存由系统自动分配和释放,而动态内存需手动申请和回收,强调了动态内存管理的重要性。
  1. 静态内存和动态内存

1、静态内存分配-15

创建文件“静态内存分配.c”

 

#include<stdio.h>

#include<stdlib.h>

/**

  静态内存分配

  在主函数中定义一个指针,指针传递给子函数,子函数给赋值

*/

func(int** pAddress){ 

  int i = 110;   

  *pAddress = &i;    

          

}   

 

main()

{

   

     int* p;     

     

     func(&p); 

     

     printf("*p=%d\n",*p); 

 

     system("pause");          

}      

 

运行结果如图:

 

 

画图分析内存分配情况:

 

 

修改代码执行

main()

{

   

     int* p;     

     

     func(&p); 

     

     printf("*p=%d\n",*p); 

     printf("*p=%d\n",*p); 

     printf("*p=%d\n",*p); 

     printf("*p=%d\n",*p); 

     printf("*p=%d\n",*p);   

 

     system("pause");          

 

 

运行结果如图:

 

特点:静态内存是系统是程序编译执行后系统自动分配,由系统自动释放,静态内存是栈分配的

 

    

 

 

 

2、动态内存-15

malloc(memory allocate) 函数

free(地址); 回收内存

realloc  re- allocate

 

创建文件“动态内存.c

 

#include<stdio.h>

#include<stdlib.h>

/**

  动态内存分配

*/

func(int** pAddress){ 

         int i = 110;

         int* temp;

         //动态的申请一块内存空间

         temp =malloc(sizeof(int)); //返回的是在堆内存中的一块地址

        

         //把申请出来的内存赋值为i;

         *temp = i;

         //把堆内存中的一块地址赋值给 一级指针变量 pAddress

         *pAddress = temp;

         

          

}   

 

main()

{

   

     int* p;     

     

     func(&p); 

     

     printf("*p=%d\n",*p); 

   

 

     system("pause");          

}      

 

运行结果:

画图分析:

打印多次:

 

main()

{

   

     int* p;     

     

     func(&p); 

     

     printf("*p=%d\n",*p); 

     printf("*p=%d\n",*p); 

     printf("*p=%d\n",*p);

     printf("*p=%d\n",*p); 

    

   

 

     system("pause");          

}  

 

 

运行结果如图:

方法执行完后被回收,但是是自己申请的空间,没有回收需要自己回收

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值