Chcem vykonať interpolačné vyhľadávanie na veľkýcharray. Jednou z možných optimalizácií je dotknúť sa pamäťových adries, ktoré sú už načítané do hlavnej pamäte ako prvé (dotýkanie sa ich nespôsobuje chybu pevnej strany) .Napríklad, ak potrebujem čítať údaje v indexe X, môžem skontrolovať, či je táto stránka v hlavnej pamäti, ak to nie je - môžem skontrolovať jednu zo susedných stránok, ktorá je už v pamäti.
Takže potrebujem nejaký mechanizmus na kontrolu stránky na adrese (X & 0xFFFFFFFFFFFE0000)
je načítaný (alebo nie). Alebo lepšie - potrebujem získať zoznam načítaných strán v rámci niektorého rozsahu adries alebo niečo takého.
Je možné v kóde užívateľského priestoru na linux alebookná (aplikácia je crossp latform)? V tomto okamihu používam iba pamäťovú vyrovnávaciu pamäť LRU posledných nedotknutých pamäťových adries s nádejou, že operačný systém nebude vymieňať nedávno použité pamäťové stránky.
odpovede:
1 pre odpoveď č. 1Vo Win32 Api
Pozrite sa na funkciu QueryWorkingSet, aby ste zistili stav pamäte vášho procesu.
Ako efektívny spôsob načítavania stránok do fyzickej pamäte nájdete v PrefetchVirtualMemory
Najnižšia úroveň, cross-platform API kompatibilná s Windows a Linuxom, o ktorých viem, je špecifikácia POSIX.
Tiež odporúčam, aby ste sa pozreli na Win32pamäťové funkcie a linia cache Intel a pamäťové kódy L2. Je to veľmi zložité, ale môže výrazne zvýšiť výkonnosť pamäťových číta / zapisuje (ak je to hlavný cieľ).