当前位置: 代码迷 >> java >> 在Java JNI编程中使用std :: string时的性能和内存使用情况
  详细解决方案

在Java JNI编程中使用std :: string时的性能和内存使用情况

热度:33   发布时间:2023-07-25 20:09:06.0
const char* chr = env->GetStringUTFChars(myjstring, NULL);
std::string cstr(chr);
env->ReleaseStringUTFChars(myjstring, chr);

上面代码中字符串数据的相同副本是
myjstring(副本1)
chr(副本2)
cstr(副本3)//字符串操作将很容易。

因此,在编写Java JNI编程时,为了避免字符串数据的一个副本,如果在上述情况下避免使用std :: string并使用char * ?,那将是一种最佳实践。

GetString / ReleaseString不一定要复制。 他们应该创建一个引用,以确保Java不会无意中释放内存。

std :: string构造函数将得到一个(可能被截断)-'\\ 0'将阻止std :: string解析字符串的数据视图。

因此,如果std :: string提供的功能超出了副本的内存成本,那将是一个平衡。 通常,它与

int function( std::string to_be_used ){

to_be_used是字符串的新副本,并且将具有(C ++ 11>)数据的完整副本。

  相关解决方案