4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
GetByteArrayElements 在DalVik的实现 - brooknew的专栏 - CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-25

今天想看看android 虚拟机 GetByteArrayElements 的实现 一直没发现。分析才知 它被藏在宏里面了。

PRIMITIVE_ARRAY_FUNCTIONS(jbyte, Byte); 》展开了宏包含了一系列函数

PRIMITIVE_ARRAY_FUNCTIONS 宏定义是

#define PRIMITIVE_ARRAY_FUNCTIONS(_ctype, _jname)                           \\
    GET_PRIMITIVE_ARRAY_ELEMENTS(_ctype, _jname);                           \\
    RELEASE_PRIMITIVE_ARRAY_ELEMENTS(_ctype, _jname);                       \\
    GET_PRIMITIVE_ARRAY_REGION(_ctype, _jname);                             \\
    SET_PRIMITIVE_ARRAY_REGION(_ctype, _jname);


其中GET_PRIMITIVE_ARRAY_ELEMENTS的定义如下

#define GET_PRIMITIVE_ARRAY_ELEMENTS(_ctype, _jname) \\
    static _ctype* Get##_jname##ArrayElements(JNIEnv* env, \\
        _ctype##Array jarr, jboolean* isCopy) \\
    { \\
        ScopedJniThreadState ts(env); \\
        ArrayObject* arrayObj (ArrayObject*) dvmDecodeIndirectRef(env, jarr); \\
        pinPrimitiveArray(arrayObj); \\
        _ctype* data (_ctype*) (void*) arrayObj- contents; \\
        if (isCopy ! NULL) { \\
            *isCopy JNI_FALSE; \\
        } \\
        return data; \\
    }

都在jni.cpp 这个文件里。

可以发现是不复制的 *isCopy JNI_FALSE; 的 是pin来的 pinPrimitiveArray(arrayObj);

pin的中文在这里不知道是怎么说

 

 

\"\" \"\" \"\" 点赞 \"\" \"\" 评论

本文链接: http://newbrookintl.immuno-online.com/view-764636.html

发布于 : 2021-03-25 阅读(0)