0

Android ndkを使用してC++ライブラリを使用しています。C++ ライブラリには、文字列の追加操作が多いメソッドがあります。したがって、私のコードでは、文字列オブジェクトを宣言してから、いくつかの追加操作を実行します。C++ ライブラリでは、そのメソッドが呼び出されすぎています。そして、私のAndroidアプリケーションはメソッドでクラッシュしています。CPU 使用率が高すぎます。私の質問は、なぜこれが起こっているのですか?reserve標準操作を使用することは良い考えですか?

使用例:

std::string GetString() const 
{ 
  std::string str1; 
  str1 = "something"; 
  str1 += "somestring"; 
  if(...) { str1 += "somestring"; str1 += "somestring"; }
  str1 += "somestring"; 
  str1 += "somestring"; 
  str1 += "somestring"; 
  str1 += "somestring"; 
  str1 += "somestring"; s
  str1 += "somestring"; 
  return str1; 
}

そして、このメソッドは C++ lib から 50 回以上呼び出しています。もう1つ言及する必要があります。次のクラッシュ レポート シグナル 11 (SIGSEGV)、コード 1 (SEGV_MAPERR)、エラー アドレス 00000010 が表示されます。これはシグメンテーション エラーである可能性があります。

4

1 に答える 1

1

はい、その使用法では .reserve() を呼び出すことは間違いなく良い考えです。多くの再割り当てを節約できるため、実行が高速になり、メモリの断片化が少なくなります。

使用可能なメモリが不足する以外に、クラッシュの原因として考えられるものはありません。

于 2013-06-06T11:17:26.110 に答える