2011-06-13 16 views
11

Java ile C arasında arabirim oluşturmak için JNI kullanırken, javah Java'da bir boolean değerini JNI başlık dosyasında jBoolean olarak ayrıştırır. C dosyasında bool kullandığınızda, Görsel stüdyo derleyiciBir değişkene jBoolean'dan boole dönüştürme türü

C4800 uyarı bir uyarı atıyor: 'jboolean' değeri zorlayarak bool 'true' veya 'yanlış' (performans uyarı)

Kullanılması gereken başka veri türü var mı? Veya buradaki tek veri türü bool ise, karşılaşabileceğim performans sorunları tam olarak nedir?

cevap

10

"Performans sorunu", dökümün tamamen ücretsiz olmamasıdır. bool'a döküm, char - - int - genişletme gibi bir "boş" döküm yerine, sıfır olmayan tüm değerleri 1'a zorlamak anlamına gelir. "Performans problemi" birkaç ekstra makine talimatıdır. Bunu bir milyon kez sıkı bir döngüde yapıyorsanız, belki, umursarız - aksi halde hayır, hiç umursamamanız gerekir. Bu IMO aptal bir derleyici uyarısıdır; Bu küçük katma maliyet sadece bool kullanırken yaptığınız uzlaşmanın bir parçasıdır ve derleyici bu konuda sizi rahatsız etmemelidir.

3

Bunun yerine BOOL'a dökmeyi deneyin. Bu parçayı da ilginç bulabilirsiniz: Difference between bool and BOOL.

Aradığınızı tam olarak bulamadığınızdan emin değilim. BOOL 16 bit değil, 8 bittir. Eğer bu uygunsa, o zaman aradığın şeye benziyor. Aksi takdirde bayt kullanabilirsiniz. Bunlardan herhangi birine dökülmeyi bitirirseniz, artık == true yapamayacaksınız. Bu, sağladığım bağlantıda da açıklanmaktadır.