GNU/Linux >> Linux Esercitazione >  >> Linux

new[] non riduce la memoria disponibile finché non viene popolata

Quando la tua libreria alloca memoria dal sistema operativo, il sistema operativo riserverà solo un intervallo di indirizzi nello spazio degli indirizzi virtuali del processo. Non c'è motivo per cui il sistema operativo fornisca effettivamente questa memoria fino a quando non la usi, come hai dimostrato.

Se guardi ad es. /proc/self/maps vedrai l'intervallo di indirizzi. Se guardi la memoria di top usa non lo vedrai - non lo stai ancora usando.


Si prega di cercare l'overcommit. Linux per impostazione predefinita non riserva memoria fino a quando non vi si accede. E se finisci per aver bisogno di più memoria di quella disponibile, non ricevi un errore ma viene ucciso un processo casuale. Puoi controllare questo comportamento con /proc/sys/vm/* .

IMO, l'overcommit dovrebbe essere un'impostazione per processo, non globale. E l'impostazione predefinita non dovrebbe essere overcommit.


Circa la seconda metà della tua domanda:

Lo standard del linguaggio non consente ritardi nel lancio di bad_alloc. Ciò deve avvenire in alternativa a new[] che restituisce un puntatore. Non può succedere più tardi!

Alcuni sistemi operativi potrebbero tentare di eseguire l'overcommit delle allocazioni di memoria e fallire in seguito. Questo non è conforme allo standard del linguaggio C++.


Linux
  1. 4 modi per controllare una memoria disponibile in Ubuntu 20.04 LTS

  2. Linux:come ottenere la quantità di memoria disponibile in modo portatile attraverso le distribuzioni?

  3. Limite di memoria PHP

  4. Come posso limitare la cache utilizzata dalla copia in modo che ci sia ancora memoria disponibile per un'altra cache?

  5. Jenkins attivo (uscito)

Bash fino a Loop

Che cos'è la NVM (memoria non volatile)?

5 modi per controllare la memoria disponibile in Ubuntu 22.04

Fedora 30 sfondi disponibili per il download

Le 10 migliori distribuzioni Linux

Utilizzo della memoria dei comandi TOP