Podivné C ++ problém kód NDK, Nexus One

hlasů
1

Mám zvláštní problém, když jsem běžet můj app na Nexus One Android 2.2. V mé aplikaci jsem použil nativní .so lib, postavený na základě NDK. V kódu v jazyce Java, mám 2 závity: jeden UI vlákno, jeden pro spuštění kódu z nativní tak lib, a poté aktualizuje UI s daty výsledku. V jazyce C ++ kódu, mám globální proměnné „počet int“, který zaznamenává časy specifická metoda „myMethod“ se nazývá, a počet se zvýší o jednu pokaždé, když „myMethod“ se nazývá. Když spustím svou aplikaci v Nexus One, s operačním systémem Android 2.2, podivné problému došlo. V mém deníku, počet je 1, 2, 3, a pak se zpráva říká, že 08-24 12: 32: 57,961: DEBUG / dalvikvm (19244): GC_FOR_MALLOC uvolněno 267 objektů / 13712 bajtů snímač 48MS. Po této události GC_FOR_MALLOC, počet můj je vynulován, počínaje dnem 1. znovu, a pak 2, 3, 4 ... Pak se zdá, že jsou k dispozici 2 závity běží stejné „myMethod“, z nichž každá vysílá svou vlastní stopu, smísí se s ostatními každý stopové náhodně. Například trasování může být

    1, 2, 3, GC_FOR_MALLOC, 1, 2, 3, 4, 5, GC_FOR_MALLOC, 4, 5, 6, GC_FOR_MALLOC, 6, 7...

Když spustím stejnou aplikaci s naprosto stejným kódem na Android Emulator, 2.1 nebo 2.2, je problém nikdy neukázal, a nejsou tam žádné GC_FOR_MALLOC událost na emulátoru.

Někdo před tento problém se setkal? Děkuji za vaší pomoc!

Položena 24/08/2010 v 08:41
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

Vypadá to, že garbage collector se zametání třídu vloženého do vaší knihovny, a to stát se znovu načíst (a re-nastavením globální proměnné) na následné volání. Kde jste načítání knihovny?

Odpovězeno 22/10/2010 v 13:11
zdroj uživatelem

hlasů
1

Možná zkuste použít těkavých klíčové slovo na proměnné? http://www.drdobbs.com/184403766

Kdy instatiate nativní třídy? Který vlákno volá myMethod? Který čte počítat? To může být způsobeno kompilátoru optimalizace. By možná vysvětlovalo, proč emulátor běží ladit kód by nevidí problém. Jen odhad na základě poskytnutých informací.

Odpovězeno 24/08/2010 v 12:10
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more