Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组...

目录(?)[+]

一:什么是静态内存什么又是动态内存呢?

  1. 静态内存:是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源。程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用完毕时,系统会自动释放所占用的内存空间所以变量的分配与释放,都无须程序员自行考虑。
  2. 动态内存:指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。

1.下面通过一个例子来认识一下静态内存分配

#include<stdio.h>
#include<stdlib.h>
/**静态内存分配*/
//二级指针才能接收一级指针的地址
void function(int** point) {//定义一个int类型的变量,并且赋值100 int i = 100; //把i对应的地址赋值给*point一级变量 *point = &i; } main() { //定义一个int类型的一级指针变量 int* point; function(&point); printf("*point=%d\n",*point); printf("*point=%d\n",*point); system("pause"); }

这里写图片描述

从打印结果看以看出,第一次打印的时候成功的改变了point的值当我们第二次打印得到的值却是0。原因其实很简单,执行function()函数的改变了point的值。当function()函数执行完毕的时候系统将函数内的变量回收掉了也就不存在了,i的地址就不存在了所以*point指向i的地址也就没有了。
这里写图片描述

2.动态内存分配(堆分配)

#include<stdio.h>
#include<stdlib.h>
/**动态内存分配*/
void function(int** point) {//malloc(内存大小);向系统申请一块内存,返回一个地址值 int* temp = malloc(sizeof(int)); int i =100; //把i的值赋值给temp指针指向的值 *temp = i; //把point对应的地址值修改为temp的地址值 *point = temp; } main() { //定义一个int类型的一级指针变量 int* point; function(&point); printf("*point=%d\n",*point); printf("*point=%d\n",*point); system("pause"); }

这里写图片描述

在function()函数中通过malloc(内存大小);函数向系统在堆内存中申请一块空间;返回一个地址值 。当function()函数执行完毕的时候*temp指针变量在堆内存中所以不会被回收,所以*point指向的地址依旧存在。

上面我门手动申请的temp内存,系统不会帮我们回收那么问题来了,当不需要的时候怎么回收这个垃圾呢?

想要回收一个垃圾的时候可以调用free函数即可将内存释放   free(变量);

二:动态创建一个数组,动态扩展数组长度

//malloc(大小)
int* arr = malloc(3);//在堆内存申请一块空间 //realloc(需重新分配内存的变量, 大小); arr = realloc(arr,3);//不改变原有内容的基础上,重新分配空间

1.看个小案例就大概知道这两个函数的意思了

#include<stdio.h>
#include<stdlib.h>
/**动态创建数组*/
main() {printf("请输入数组的长度:\n"); int length; scanf("%d",&length); printf("输入数组的长度为:%d\n",length); //动态申请一块内存,int占4个字节 int* arr = malloc(length * 4); int i; for(i=0; i<length; i++) { printf("输入arr[%d]的值:",i); scanf("%d",arr+i); } //让用户扩展数组的长度 printf("请输入扩展数组的长度:\n"); int superLength; scanf("%d",&superLength); //对数组的内存进行重新分配 realloc(需重新分配内存的变量, 大小); arr = realloc(arr,(length + superLength) * 4); for(i=length; i<length + superLength; i++) { printf("输入arr[%d]的值:",i); scanf("%d",arr+i); } //将数组的内容打印出来 for(i=0; i<length + superLength; i++) { printf("arr[%d]的值=%d\n",i,*(arr + i)); } //使docs窗口停留 system("pause"); }

来看下程序运行效果
这里写图片描述

三:静态内存相当于Java中一个函数内的变量,执行方法的时候开辟一块空间方法执行完毕的时候由Jvm进行回收;动态内存就相当于我们Test test = new Test();test所占的内存就是动态内存。

转载于:https://www.cnblogs.com/Free-Thinker/p/6169328.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio-C#-20160411

函数的四个要素包括&#xff1a;名称&#xff0c;输入&#xff0c;输出&#xff0c;加工 注释的方式&#xff1a;//只注释一行&#xff1b;/**/注释一段区域&#xff1b; namespace ConsoleApplication6 ---------//命名空间{ class Program ---------------------------//类…

配置MyBatis 3

MyBatis是一个非常流行且也是最有效的SQL映射框架。 MyBatis可用于Java和.net语言。 MyBatis并不是Hibernate的真正替代品&#xff0c;但是我们可以使用该框架来减少MyBatis提供的高效和高性能的数据库相关代码。 本教程将向您展示使用数据库配置MyBatis 3的步骤。 MyBatis 3支…

php获取src,PHP读取文件

本文概述PHP提供了各种功能来从文件读取数据。有多种功能允许你读取所有文件数据, 逐行读取数据以及逐字符读取数据。下面提供了可用的PHP文件读取功能。fread()fgets()fgetc()PHP读取文件-fread()PHP fread()函数用于读取文件的数据。它需要两个参数&#xff1a;文件资源和文件…

HDOJ(HDU) 1406 完数

Problem Description 完数的定义&#xff1a;如果一个大于1的正整数的所有因子之和等于它的本身&#xff0c;则称这个数是完数&#xff0c;比如6&#xff0c;28都是完数&#xff1a;6123&#xff1b;28124714。 本题的任务是判断两个正整数之间完数的个数。 Input 输入数据包…

Allegro padstack

在ALLEGRO中&#xff0c;建立PCB封装是一件挺复杂的事&#xff0c;而要建立FOOTPRINT&#xff0c;首先要有一个PAD&#xff0c;所以就要新建PADSTACK。 焊盘可以分两种&#xff0c;表贴焊盘和通孔焊盘&#xff0c;表贴焊盘结构相对简单&#xff0c;下面首先分析表贴焊盘的成分&…

java中datetime类型转换,Java中日期格式和其他类型转换详解

涉及的核心类&#xff1a;Date类、SimpleDateFormat类、Calendar类一、Date型与long型Date型转换为long型Date date new Date();//取得当前时间Date类型long date2long date.getTime();//Date转longlong型转换为Date型long cur System.currentTimeMills();//取得当前时间lon…

GWT MVP变得简单

GWT Model-View-Presenter是用于大规模应用程序开发的设计模式。 它源于MVC&#xff0c;它在视图和逻辑之间进行划分&#xff0c;并有助于创建结构良好&#xff0c;易于测试的代码。 为了帮助像我这样的懒惰开发人员&#xff0c;我研究了如何减少使用声明式UI时要编写的类和接口…

php如何编写通信协议,定制通讯协议

## 如何定制协议实际上制定自己的协议是比较简单的事情。简单的协议一般包含两部分:* 区分数据边界的标识* 数据格式定义## 一个例子### 协议定义这里假设区分数据边界的标识为换行符"\n"(注意请求数据本身内部不能包含换行符)&#xff0c;数据格式为Json&#xff0c…

今年计划要看的书全部备齐

上个月购买的书《今年计划看的书其中几本》 http://www.cnblogs.com/insus/p/5325513.html 昨天购买的书回来了&#xff0c;今年计划要看的书全部备齐。《MongoDB》&#xff0c;《深入理解Bootstarp》和《ASP.NETSignalR编程实践》…… 转载于:https://www.cnblogs.com/in…

Codevs 2756 树上的路径

2756 树上的路径 时间限制: 3 s    空间限制: 128000 KB    题目等级 : 大师 Master题目描述 Description给出一棵树&#xff0c;求出最小的k&#xff0c;使得&#xff0c;且在树中存在路径P&#xff0c;使得k> S 且 k <E. &#xff08;k为路径P上的边的权值和&a…

图形教程

众所周知&#xff0c;我们可以借助Java库制作游戏&#xff0c;这些库为我们提供制作游戏所需的图形。 因此&#xff0c;今天我将开始一个关于Java图形的非常新的部分。 我之前曾发表过有关如何制作所得税计算器的文章 。 首先要满足一些先决条件&#xff1a; -您应该对Java语法…

文件上传预览

<fieldset><legend>使用readAsDataUrl()方法预览图片</legend><input type"file" name"fileUpload" id"fileUpload" onchange"filePrevImg(this.files);" multiple"true" /><ul id"prevUpl…

c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast

一、介绍 dynamic_cast: 通常在基类和派生类之间转换时使用const_cast: 主要针对const和volatile的转换static_cast: 一般的转换(no run-time check)通常&#xff0c;如果你不知道该用哪个&#xff0c;就用这个。 reinterpret_cast: 用于进行没有任何关联之间的转换&…

K8S Pod Terminating/Unknown故障排查

一、pod异常出现现象 优雅终止周期(Graceful termination period): 当pod被删除时&#xff0c;会进入"Terminating"状态&#xff0c;等待容器优雅关闭。如果容器关闭所需时间超过默认期限(默认30秒)&#xff0c;则pod将保持在"Terminating"状态。 Finalize…

矩阵指数 matlab,矩阵指数 - MATLAB Simulink Example - MathWorks 中国

方法 1&#xff1a;加权平方expmdemo1 是以下著作中算法 11.3.1 的实现&#xff1a;Golub, Gene H. and Charles Van Loan.Matrix Computations, 3rd edition.Baltimore, MD:Johns Hopkins University Press, 1996.% Scale A by power of 2 so that its norm is < 1/2 .[f,e…

向导设计模式

我们都喜欢巫师……。 &#xff08;我的意思是软件向导&#xff09;。 我们总是很高兴跳上那些“下一步”按钮&#xff0c;就像我们在我们的时髦的小鸡上跳舞一样。 因此&#xff0c;今天我们将您心爱的向导带入您的编码经验中。 让我们跳入一个例子。 假设您要设计一个Conserv…

IO(三)字节流练习

public class ByteStreamDemo {/*int available(); 可以取得输入文件的大小&#xff08;字节个数&#xff09;,没有返回0void close(); 关闭输入流abstract int read(); 读取一个字节&#xff0c;并把读…

基于matlab的人脸五官边缘检测方法,人脸边缘检测方法研究与仿真

人脸表情是人类情感的主载体之一,它含有丰富的人体行为信息。通过脸部表情能够表达人微妙的情绪反应以及对应的心理状态[1],人脸表情识别技术随着人们对表情信息的日益重视而受到关注,现已成为人们研究的热点。基于几何特征提取是一个快速、直接、有效的人脸表情识别方法,运用基…

GWT –利弊

我喜欢JavaScript。 随着jQuery和Mootools的出现&#xff0c;我对JavaScript的热爱仅增加了很多倍。 只要有选择&#xff0c;我就可以将上述框架中的任何一个用于我开发的任何Web应用程序。 但是进入服务行业后&#xff0c;我不得不一次次屈服于客户的压力&#xff0c;并在他们…

秦九韶算法matlab实验报告,数值分析上机实验报告.doc

实验报告一题目&#xff1a; (绪论) 非线性方程求解及误差估计摘要&#xff1a;非线性方程的解析解通常很难给出&#xff0c;因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法、Newton法和改进的Newton法。可以节省计算机的计算时间&#xff0c;还能减小…