C işaretçileri arasında geçen ve JNI aracılığıyla Java
Şu anda, CUDA-işlevsellik, Java uygulaması oluşturmak için çalışıyorum. CUDA ve Java arasındaki bağlantı gayet iyi çalışıyor, ama başka bir sorun var ve eğer bu konuda düşüncelerimin doğru olup olmadığını sormak istedim.
Java yerel bir işlev aradığımda fonksiyonları bir şeyler hesaplar ve sonucu döndürür bazı veri geçtim. Geçebilir ki bu sonuç mümkün, ilk işlevi bir referans (işaretçi) dönmek ve sonuçtan daha sonraki hesaplamalar yapan başka bir işlevi JNI Ara.
Benim fikrim diğer fonksiyonları kullanabilmesi için GPU bellek verileri bırakarak ve GPU arasında veri kopyalama gelen yükü azaltmak için ve sadece bir başvuru geçiyordu.
Denedikten sonra bir süre kendi kendime düşündüm, bu işaretçiler uygulama sona erdikten sonra silinir çünkü mümkün olmamalı (Bu durumda, C-fonksiyonu sona erdirir). Bu doğru mu? Ya da sadece kötü C görmek çözüm mıyım?
Edit: Soruyu genişletmek için biraz (ya da daha açık olun): bellek JNI yerel fonksiyonları işlevi ne zaman biter? ayırmanın tarafından tahsis Edilir Ya ben hala da JNI uygulama uçları veya el ile ben ücretsiz ne kadar erişebilir?
Katkın için teşekkürler
CEVAP
Aşağıdaki yöntemi kullandım
JNI kod, ihtiyacınız olan nesnelere başvurular tutan bir yapı oluşturmak. Sen önce bir yapı oluşturmak, pointer long
java dönmek. Sonra, java sadece bir parametre olarak long
Bu konuda herhangi bir yöntemini çağırın, ve C yapı için bir işaretçi koyun.
Yapısı farklı JNI aramalar arasında temizlenene kadar yığını olacak.
EDİT: statik bir değişken olduğu adresi uzun Ao = (long)&address;
kullanabilirsiniz sanmıyorum. Bu şekilde Gunslinger47 önerdi, yani kullanımı bir sınıf veya yapı birimi (new veya malloc kullanarak) yeni bir örnek oluşturun ve işaretçi geçirir.
Görünüm arasında geçen Veri Denetleyic...
Program aracılığıyla Java işletim sist...
' ve' ve', ' Java ...
Java işlev İşaretçileri...
Açısal JS denetleyicileri arasında geç...