Princip souboru mapovaného do paměti je poměrně přenosný, ale ve Windows nemáte mmap() (ale věci jako MapViewOfFile() existují). Můžete se podívat do kódu c modulu python mmap modules a zjistit, jak to dělají pro různé platformy.
Použití mmap pro čtení souborů není přenosné, pokud se spoléháte na mapování velkých bitů velkých souborů do vašeho adresového prostoru - 32bitové systémy mohou snadno mít k dispozici jediný velký využitelný prostor - řekněme 1G - adresního prostoru, takže mmap by docela selhal často pro mapování 1G.
mmap()
funkce je volání POSIX. Funguje dobře na MacOS X (a Linux a HP-UX a AIX a Solaris).
Problémovou oblastí budou Windows. Nejsem si jistý, zda existuje _mmap()
zavolejte v podsystému 'kompatibility' POSIX. Pravděpodobně tam bude – ale název bude mít podtržítko na začátku, protože Microsoft má alternativní pohled na jmenné prostory a zvažuje mmap()
zasahovat do prostoru uživatelských jmen, i když žádáte o funkčnost POSIX. Můžete najít definici alternativního rozhraní Windows MapViewOfFile()
a diskuse o výkonu v další otázce SO (mmap()
vs bloky čtení).
Pokud se pokusíte mapovat velké soubory na 32bitovém systému, možná zjistíte, že není dostatek souvislého prostoru pro alokaci celého souboru v paměti, takže mapování paměti se nezdaří. Nepředpokládejte, že to bude fungovat; rozhodnout, jaká je vaše záložní strategie, pokud selže.
Paměťové mapované io na UNIXu považuji za nepoužitelné pro interaktivní aplikace, protože to může mít za následek SIGSEGV/SIGBUS (v případě, že soubor byl mezitím zkrácen jiným procesem). Ignorování tak špatných "řešení" jako setjmp/longjmp není nic lze udělat něco jiného, než ukončit proces po získání SIGSEGV/SIGBUS. Nová funkce G++ pro převod takových signálů na výjimky se zdá být určena hlavně pro Apple OS, protože popis uvádí, že pro tuto funkci G++ je potřeba runtime podpora a neexistuje žádná informace o této funkci G++ lze najít kdekoli. Pravděpodobně si budeme muset několik let počkat, než se strukturované zpracování výjimek, které lze nalézt na Windows, protože již více než 20 let, dostane do UNIXů.