Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组...
生活随笔
收集整理的這篇文章主要介紹了
Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版權聲明:本文出自阿鐘的博客,轉載請注明出處:http://blog.csdn.net/a_zhon/。
目錄(?)[+]
一:什么是靜態內存什么又是動態內存呢?
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
總結
以上是生活随笔為你收集整理的Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: apache服务器配置Net的实践
- 下一篇: Android之封装好的异步网络请求框架