GNU/Linux >> Znalost Linux >  >> Linux

Jak přenosný je mmap?

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ů.


Linux
  1. Jak vytvořit nebo zvětšit swapový prostor v Linuxu

  2. Jak diagnostikovat a opravit chybějící místo na disku?

  3. Jak přidat odkládací prostor na Debianu 11

  1. Jak přidat odkládací prostor v linuxu

  2. Jak zvětšit odkládací prostor v Linuxu

  3. Jak na to:Uvolněte místo na disku Snížením rezervovaných bloků

  1. Jak používat příkaz sed pro Linux

  2. Jak přidat odkládací prostor na Ubuntu 22.04

  3. jak se určuje velikost stránky ve virtuálním adresovém prostoru?