Hey, it appears it's something wrong with allocators in the unordered_map resulting code. I tried to change to std::map, but the error comes even sooner and happens at the second allocation - at least this gives a hint it's in the allocation and not in the hashing? I step on the Webassembly code in the chrome dev tools but was going nowhere reading the source from the STL.
It was here (for unordered map) : :std::__2::pair<std::__2::__hash_iterator<std::__2::__hash_node<std::__2::__hash_value_type<unsigned\20long\2c\20int>\2c\20void*>*>\2c\20bool>\20std::__2::__hash_table<std::__2::__hash_value_type<unsigned\20long\2c\20int>\2c\20std::__2::__unordered_map_hasher<unsigned\20long\2c\20std::__2::__hash_value_type<unsigned\20long\2c\20int>\2c\20std::__2::hash<unsigned\20long>\2c\20true>\2c\20std::__2::__unordered_map_equal<unsigned\20long\2c\20std::__2::__hash_value_type<unsigned\20long\2c\20int>\2c\20std::__2::equal_to<unsigned\20long>\2c\20true>\2c\20std::__2::allocator<std::__2::__hash_value_type<unsigned\20long\2c\20int>\20>\20>::__insert_unique<std::__2::pair<unsigned\20long\2c\20int>&\2c\20void>\28std::__2::pair<unsigned\20long\2c\20int>&\29 For now I replaced this with a simple for that iterates in the array of object until it finds the corresponding address and it's working. I also tried to turn on EMULATE_FUNCTION_POINTER_CASTS but this gave me an error message in the console at the module initialization saying it could not convert 1 to BigInt , I then tried to disable WASM_BIGINT but it didn't work. Function pointer casts are necessary for the plugin interface in the code so it would be cool to get them, otherwise I need to figure a way to rewrite that part of the engine - but this should be ok for now. I do still have some problems (threaded sounds and a blocking while) but I think I can solve them with SDL threads and asincfy, or other approaches, those are fine and can easily be solved once I have more time. Anyway, it's pretty amazing seeing a simple game bootup and run in the browser, great work people. On Tue, Oct 20, 2020, 15:50 eri0o o <[email protected]> wrote: > Thanks, I changed and with the leak detection on the console is possible > to see it's trying to allocate a lot of memory. > > It should be only a insert of a pointer / integer in the unordered map, > but for some reason it tries to allocate a lot of memory for that - until > it tries to allocate more memory than it's possible. > > It still crashes around the same point. > > On Tue, Oct 20, 2020, 06:59 eri0o o <[email protected]> wrote: > >> If code is needed this can be seen here: >> >> https://ericoporto.github.io/agsjs/ >> >> Code that was used to generate that: >> https://github.com/ericoporto/ags/tree/ags3-emscripten >> >> You can see it crash after 25 allocations of managed objects, which is >> this line here: >> >> >> https://github.com/ericoporto/ags/blob/9e9229fc26fcce9f365e2a60f0f87e20a298113c/Engine/ac/dynobj/managedobjectpool.cpp#L158 >> >> On Tue, Oct 20, 2020, 00:11 eri0o o <[email protected]> wrote: >> >>> Hello, >>> >>> I am using std::unordered_map<const char*,int32_t> and my wasm result >>> has a really slow insert time. Is there something to that I should be aware >>> of? My code crashes after 25 inserts for lack of memory, no matter what. >>> >>> It's a bit crazy because everything else works great. >>> >>> Regards, >>> >>> Érico >>> >> -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/emscripten-discuss/CAG1KTJetOArwP6VVUdNSOQsAvGzDvy0%3DHwtA%2Bz60f5hVueZxkQ%40mail.gmail.com.
