• JNI-java native interface(java本地接口)


    什么是JNI
    java native interface(java本地接口)
    ABI: application binary interface (应用程序二进制接口)
    为什么要使用JNI
    复用很多优秀的c/c++代码
    - ffmpeg 多媒体播放器 
    - opencv 图形识别引擎
    - 7-zip  压缩
    - opencore 视频播放
    效率问题
    - java代码跨平台,不直接操作硬件,虚拟机解释执行。垃圾回收机制。
    - art 在安装apk应用程序的时候,把apk里面的dex翻译成机器码(apk的体积会变大)
    c代码直接操作硬件,程序员可以手工的释放内存
    * 应用场景问题
    c代码可以直接操作硬件。
    - java代码只能操作虚拟机(一次编译到处执行)
    智能家居操作硬件
    - 车载电脑(obd: onboard debug system)
    * 特殊业务逻辑
    - c代码反编译困难,调试困难。
    - java代码反编译容易,很容易看懂。
    怎么使用JNI
    * 看懂c代码( 有c语言基础)
    * 懂流程 (熟悉jni的规范)
    * 熟练(NDK 工具 native develop kits)
    #开发工具
    dev-cpp.exe 
    1. 轻量级开发工具
    2. 编译器gcc c99标准
    c语言helloworld
    1.声明头文件,相当于java的导包。
    #include <stdio.h> 
    2.写main()方法 
    main(){
    }
    3.为了观察程序执行的结果,需要调用windows系统的一个指令
    system("pause"); 
    C语言的基本数据类型
    * java语言的8大基本类型 
    - int   4byte  32位
    - byte  1byte  8位
    - short 2byte  16位
    - long  8byte   64位
    - float 4byte   32位
    - double 8byte  64位
    - boolean 1byte 8位
    - char   2byte 16位
    * c语言的基本数据类型
    sizeof();获取一个数据类型的长度 
    - char 1byte 8位 和java不同
    - long 4byte 32位和java不同
    - int  4byte 32位 和java一致
    - float 4byte 32位 和java一致
    - double 8byte  64位和java一致
    - short 2byte  16位 还可以表示java里面的char
    - 在c语言里面没有boolean类型,0假 非0真
    - 在c语言里面没有byte类型 可以用char表示byte类型。
    * 修饰符的作用
    - signed 有符号
    - unsigned 无符号
    > 1000 0000(负0)   ->  0111 1111+1(取反加1 ) = 1000 0000(负128)
    > 缓冲区溢出漏洞。本质原因就是c语言不检查数组下标。不检查内存空间的越界
    ##指针
    指针就是 一块内存空间(内存地址)
    * window 32位系统 寻址空间32位
            最多能表示出来4G内存地址的组合。
    计算机有一些硬件设备需要占用一些内存地址。
    留给用户的可用空间 不足3个G
    * window 64位系统 寻址空间是64位
    号的含义
    * 如果跟着一种数据类型的后面int*  代表是一种指针变量, 存放的是一个内存地址。
    * 如果*号放在一个指针变量的前面,代表的是取地址里面数据的操作 *p 把p地址里面存放的数据取出来
    * x*y  相乘
    指针变量和指针的概念
    看世面上书的时候 指针变量和指针没什么区别
    指针变量: 一个变量 int* p; p是指针变量
    指针: 一块内存空间的地址
    值传递和引用传递
    * 准确讲只有值传递。调用子函数所有的操作,都是值传递。
    引用传递,还是值传递,传递是对象的地址
    所有程序执行的内存分配的特点。
                子函数一旦执行完毕后,内存空间会被系统回收。
  • 相关阅读:
    跨域解决方法
    css之line-height
    untiy项目中使用MD5加密
    unity给子物体添加Shader
    unity中UI坐标转3d世界坐标
    unity项目字符串转为Vector3和Quaternion
    unity中使用Highlighting System v4.0插件给物体添加高亮
    加载AssetBundle方法
    Lua面向对象----类、继承、多继承、单例的实现
    Lua学习笔记(一)-----C#和lua的交互
  • 原文地址:https://www.cnblogs.com/itlyh/p/6047166.html
Copyright © 2020-2023  润新知