2012-02-07 20 views
4

私はNDK(jni)を使ってAndroidにいくつかのネイティブコードを書いていました。 gccコンパイラの最適化を無効にしたいと思います。 今のところAndroid.mkにLOCAL_CFLAGS += -O0を追加していますが、動作しているかどうかはわかりません。ndk-buildのgcc最適化レベルを知る方法

私はこのようなループのオーバーヘッドをテストするためのいくつかのコードを書いた:

// gettime 
for(int i = 0 ; i<10000;i++) 
{ 

} 
// gettime 

時間差が、私はループがコンパイラによって削除されたことを確信しているということは小さすぎます。 iを揮発性変数に変更できますが、コンパイラの最適化を正しくオフにしているかどうかをテストします。

gcc(ndk-build)で使用されている最適化レベルを知るにはどうすればよいですか?すべてのメッセージを取得するにはmakeを冗長に設定できますか?

ありがとうございます。

+0

10K 'inc'sを提出あなたのApplication.mkに

APP_OPTIM := debug 

を追加することは可能性が非常に高いです10kクロックサイクルで実行できます。それは「遅い」プロセッサでさえも_速く_です。 – Mat

答えて

8

最適化を無効にする方法はこちらをご覧ください:Android NDK assert.h problems

は、基本的にはあなたが何をする必要があるか

+0

それは動作します!感謝のトン! –

6

コンパイラは、最適化が有効になっている場合、__OPTIMIZE__という名前のマクロを定義します。

これらの行をCファイルに挿入すると、makeフラグがそのファイルに対して機能しなかった場合、コンパイルは失敗します。

#ifdef __OPTIMIZE__ 
#error Optimization enabled. That's not right! 
#endif 

ビルドされたバイナリファイル(.oまたは実行可能ファイル)のアーチ特有のフラグをチェックすることもできます。

readelf -A myfile.o 

ARMは、最適化レベルを示すフラグを持っていますが、私は、Androidツールチェーンが正しくそれを使うには少し古いかもしれないと思うので、YMMV。

+0

はい、私はあなたのコードでそれをチェックします、 '-O0'は動作していません、コンパイラは単にエラーメッセージをスローします。どのように正しくandroid-jniプロジェクトの最適化をオフにするには? –

関連する問題