Jak můžete zjistit, zda je maximální velikost paměti stohu o programu C ++ na Linuxu? (Gnu kompilátor)

hlasů
2

Jsem zvědavý, jak zjistit, co je maximální velikost zásobníku pro konkrétní kompilátor / os combo. Já používám Ubuntu / GNU kompilátor. Pár otázek, které mám navíc patří:

  1. Kdo ovládá výchozí velikost maximální zásobníku; OS nebo kompilátor?
  2. Je výchozí maximální poměru k celkové paměti? (Tj stroj s 2GB paměti by mít větší velikost než výchozí stroji s pouze 512) V tomto příkladu oba stroje jsou stejné nastavení os / překladač, jen různá množství systémové paměti RAM.

Dík!

Položena 25/03/2009 v 17:50
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
6

Kdo ovládá výchozí velikost maximální zásobníku; OS nebo kompilátor?

Překladač obvykle. OS / hardware, omezuje jej do určité míry. Výchozí hodnota je 8 MB. Na linux IIRC. Myslete na ulimit -ssystému Linux (pro změnu velikosti zásobníku).

Je výchozí maximální poměru k celkové paměti? (Tj stroj s 2GB paměti by mít větší velikost než výchozí stroji s pouze 512) V tomto příkladu oba stroje jsou stejné nastavení os / překladač, jen různá množství systémové paměti RAM.

Ne. Dokud a pokud to uděláte yiurself.You může změnit velikost zásobníku přes kompilátor přepínače.

ld --stack=<STACK_SIZE>

nebo

gcc -Wl,--stack=<STACK_SIZE>

Vezměte si Standard C ++ o problematice komínů a hromady:

Norma je založena na abstraktním stroji a opravdu není sama o sobě tím hardwarem nebo komíny nebo hromad. To mluví o přidělené obchodu a volného obchodu. Volný obchod je místo, kde byste se, pokud voláte nový (většinou). FWIW, implementace může mít pouze jeden paměťový prostor maskující se jako oba zásobníku a haldy, pokud jde o námitky alokaci.

Váš dotaz, omáčky, scvrkává být specifický problém implementace spíše než záležitost jazyka.

Snad to pomůže.

Odpovězeno 25/03/2009 v 17:54
zdroj uživatelem

hlasů
3

V systému Linux (Ubuntu), operační systém řídí maximální velikost. Viz "man omezení" nebo "man ulimit" pro reference.

Odpovězeno 25/03/2009 v 17:53
zdroj uživatelem

hlasů
2

V současné době je správná otázka zní: Kolik paměti je přiděleno pro mé vlákno. Každé vlákno dostane částku, která obvykle můžete ovládat v době thread-tvorby.

Chcete-li odpovědět na část 1, kompilátor / thread-systém dostane k vyzvednutí, i když některé operační systémy mají (historicky) měl limity.

Pro 2 osoby, ne to není měřítko.

Odpovězeno 25/03/2009 v 17:54
zdroj uživatelem

hlasů
0

Neexistuje žádný způsob, jak to udělat portably - C ++ Standardní není ve skutečnosti vyžadují stack.

Odpovězeno 25/03/2009 v 17:53
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more