gcc, linux - limit cca 700 MiB na pole v kuse?

Milan Kerslager milan.kerslager na pslib.cz
Středa Leden 7 13:47:45 CET 2004


On Wed, Jan 07, 2004 at 01:03:57PM +0100, Martin Proks wrote:
> Zdravim,
> 
> Pisu program pro linux ktery potrebuje alokovat opravdu velke
> pole radu GiB a nedari se mi alokovat vic nez cca 700 MiB v kuse
> (pameti mam dost, 6 GiB). Nereste ted jestli to ma smysl a nebylo
> by ucelnejsi to rozdelit atd, ma to byt hracka ktera zabere hodne
> pameti, narve tam nejaka cisla a zacne scitat, odcitat, zapisovat a
> cist z disku, ... par dni v kuse ... a proveri stabilitu systemu a
> HW.
> 
> Proste jsem si myslel, ze mohu pozadat system o RAM a budto je a
> dostanu ji, nebo neni a malloc vrati NULL. Jenze i kdyz RAM mam
> (+ mooore swap), tak experimenty jsem zjistil, ze cca vic nez 700 MiB
> v jednom kuse nedostanu a kdyz prelezu cca 2 GiB na program, tak mam
> taky stop. Nevim kde je to omezeni. Jestli gcc, limit kernelu, ...?
> Zas tak moc tomu nerozumim a nevim kde hledat odpoved.

Narazil jste na limit x86 architektury. Maximalni velikost primo
adresovatelne pameti je 4GB. Kus ukousne jadro, je tam take mapovana
fyzicka RAM. Za pomoci PAE muzete pri akceptovani jisteho overheadu
(radove procenta) dosahnout az stavu, kdy proces ma 4GB a jadro je v
jine strance (v jinych 4GB). Tohle se nastavuje pri kompilaci jadra (v
distribucich jsou jadra enterprise, bigmem, hugemem a podobne - je
potreba si precist, co ktere umi).

No a pak asi narazite jeste na problem rozdeleni pameti (knihovny,
mmap). Presna cisla bych musel hledat.

Pokud chcete alokovat > 4GB, budete potrebovat 64 bitovou architekturu.

> Momentalne jsem to vyresil tak, ze alokuji ten odzkouseny limit a
> proste jsem ten zatezovy programek spustil vicekrat na raz. Ale zajimalo
> by me kde a proc je to omezeni.

-- 
                        Milan Kerslager
                        E-mail: milan.kerslager na pslib.cz
                        WWW:    http://www.pslib.cz/~kerslage/


Další informace o konferenci Linux