GNU/Linux >> Znalost Linux >  >> Linux

new[] nesnižuje dostupnou paměť, dokud není naplněna

Když vaše knihovna alokuje paměť z OS, OS si pouze vyhradí rozsah adres ve virtuálním adresním prostoru procesu. Není důvod, aby OS skutečně poskytoval tuto paměť, dokud ji nepoužijete – jak jste ukázali.

Pokud se podíváte např. /proc/self/maps zobrazí se rozsah adres. Pokud se podíváte na použití paměti top neuvidíte jej – zatím jej nepoužíváte.


Hledejte prosím přetížení. Linux ve výchozím nastavení nerezervuje paměť, dokud k ní není přístup. A pokud nakonec budete potřebovat více paměti, než je k dispozici, neobjeví se chyba, ale náhodný proces bude zabit. Toto chování můžete ovládat pomocí /proc/sys/vm/* .

IMO, overcommit by mělo být nastavení pro jednotlivé procesy, nikoli globální. A výchozí hodnota by neměla být překročení.


O druhé polovině vaší otázky:

Jazykový standard neumožňuje žádné zpoždění při vyvolání bad_alloc. To se musí stát jako alternativa k new[] vracení ukazatele. Později se to stát nemůže!

Některé operační systémy se mohou pokusit přerušit přidělení paměti a později selžou. To není v souladu s jazykovým standardem C++.


Linux
  1. Limit paměti PHP

  2. Jak mohu omezit mezipaměť používanou kopírováním, aby byla stále k dispozici paměť pro jinou mezipaměť?

  3. Jenkins aktivní (opuštěno)

  1. Je možné alokovat velké množství virtuální paměti v linuxu?

  2. Linuxová neaktivní paměť

  3. Cent OS:Jak mohu vypnout nebo snížit přetížení paměti a je to bezpečné?

  1. Využití paměti Linuxu

  2. Linux – Jak získat množství dostupné paměti přenositelně napříč distribucemi?

  3. SQL Server Standard využívá veškerou dostupnou paměť