Jaculus icon indicating copy to clipboard operation
Jaculus copied to clipboard

Implement module loading without extra copies of the source in memory

Open Tasssadar opened this issue 3 years ago • 2 comments

Většina je prostě nakopírovaná z duktape, kde jsou to static fce :(

Z kroužku, https://youtu.be/tyE7_vMr1xc

Closes #1

Tasssadar avatar Nov 16 '21 15:11 Tasssadar

Ještě na jinou notu a trochu popuštění uzdě fantazii; chvilku jsem zkoumal, jestli bychom se nemohli zbavit načítání souboru do paměti úplně. Což třeba na POSIXu je v pohodě, protože máme mmap. To bohužel ESP neumí a pouze esp_partition_mmap. Jenže FAT nezaručuje, že bude soubor spojitě v paměti za sebou. A bohužel neumím (zatím) virutálně mapovat kusy paměti z flashky za sebe. Kdybychom to uměli, tak nám stačí mít ve flashce string s hlavičkou a patičkou a jen správně za sebe namapovat stránky z FAT filesystému.

yaqwsx avatar Nov 16 '21 17:11 yaqwsx

Eh, tak ještě poznámka pro odvážná budoucí individuaa, existuje funkce:

esp_err_t IRAM_ATTR spi_flash_mmap_pages(const int *pages, size_t page_count, spi_flash_mmap_memory_t memory,
                         const void** out_ptr, spi_flash_mmap_handle_t* out_handle)

Která vypadá, že může mapovat libovolné stránky kontinuálně za sebou... Teď je ještě potřeba umět namapovat existující stránku z RAM na novou adresu a poté udělat:

| Nová stránka, na jejímž konci je hlavička | Stránka ze souboru 1 | ... | Stránka ze souboru n - 1 | Kopie poslední části souboru v RAM obohacená o patičku |

Tím jsme získali ukazatel na řetězec obsahující zdrojový text bez kopie (tedy kromě poslední stránky, ale ta je 32 bytů).

Určitě to nechci v tomto PR nic z výše uvedeného, spíše si dělám poznámky pro mě nebo odvážné programátory.

yaqwsx avatar Nov 16 '21 17:11 yaqwsx