Android jni(1)

来源:互联网 发布:阿里云 虚拟主机 jsp 编辑:程序博客网 时间:2024/06/05 06:45

JNI

*Java native interface

基本数据类型

java

  • byte:1
  • short:2
  • int:4
  • long:8
  • float:4
  • double:8
  • char:2
  • boolean:1

C

  • short:2
  • int:4
  • long:4
  • float:4
  • double:8
  • char:1

有符号无符号

  • 无符号表示不分正负
  • int类型,4个字节,32位,可以表示 2的32次方 个数字
  • int能表示的最大值是 2的32次方-1 ,那么取值范围就是 0 ~ 2的32次方-1
  • 有符号:最高位取出来作为符号位,表示正负;剩下31位,作为数值位,表示数字
  • 只有31个数值位,那么能表示的数字个数是 2的31次方,取值范围是 0 ~ 2的31次方-1
  • 符号位如果为0,那么数值位表示出来的就是正数,符号位如果为1,那么数值位表示出来的就是负数
  • 符号位为0时,取值范围是 0 ~ 2的31次方-1,符号位为1时,范围是 -2的31次方 ~ -1
  • 两个范围取并集,那么有符号int的范围就是 -2的31次方 ~ 2的31次方-1
  • 无符号数的最高位依然是数值位,没有符号位
  • 无符号int的取值范围是 0 ~ 2的32次方-1

原反补

  • 原码:数字转换成二进制表示
  • 反码:原码除最高位,其他位依次取反
  • 补码:反码 + 1
  • 正数的原反补是相同的

输入函数

  • 每一块内存都有地址,没有地址的内存空间是无法访问的
  • 内存中的所有数据都是通过地址拿到的
  • C的数组不会检测越界

内存地址

  • 32位操作系统,最大能支持的内存数量是4G
  • 32位系统的地址总线长度是4个字节,也就是说可以分配 2的32次方 个数字作为内存地址
  • 每一个字节都必须有一个内存地址
  • 32位系统能支持的内存是 2的32次方 个字节

内存修改器

  • 原理:找到要修改的变量的地址,直接操作地址上的值
  • 金山游侠、东方魔术师

指针

  • 定义一个int型的指针变量,它的值必须是一个int变量的地址

    int* p = &i;

指针常见错误

  • 为赋值的指针,不要去使用*p,这种指针称为野指针

值传递引用传递

  • 所有传递都是值传递,引用传递传的也是一个值,但是这个值是一个地址

堆栈

  • 自动申请
  • 大小是固定的
  • 占用空间是连续的
  • 自动释放
  • 栈上分配的内存叫静态内存

  • 程序员手动申请
    • java:new
    • C:malloc
  • 堆的大小受限于系统的虚拟内存
  • 堆占用的空间是不连续的
  • java:自动回收
  • C:手动回收
  • 堆上分配的内存叫动态内存
0 0
原创粉丝点击