Προς το περιεχόμενο

Πρόβλημα με memory


idet2

Προτεινόμενες αναρτήσεις

Πως μπορώ να δω πόση μνήμη καταναλώνει ένα προγραμμα????

 

Τρέχω κάποια simulations και όταν ανεβαίνει η πολυπλοκότητα μάλλον δεν έχει άλλη διαθέσιμη μνήμη. Θα ήθελα αν γίνεται να μου πει κάποιος πως μπορώ να κάνω allocate τη διαθέσιμη μνήμη του μηχανήματος μου σε αυτό το πρόγραμμα γιατί από ότι καταλαβαίνω το Linux κάνει στην αρχή allocate ένα μέρος της μνήμης σε κάθε πρόγραμμα και θα ήθελα να το αλλάξω αυτό.

 

Ευχαριστώ

 

Edit : Ξέχασα να πω ότι τρέχω Fedora Core 4

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το πόση μνήμη καταναλώνει ένα πρόγραμμα μπορείς να το δεις είτε με το top είτε με την εντολή ps aux. Κοιτάς το RSS για τη φυσική μνήμη που καταναλώνει και το VSIZE για τη συνολική.

 

Ο πυρήνας προφανώς κάνει σωστό memory allocation και δεν μπορείς να το αλλάξεις αυτό. Δεσμεύει όση μνήμη χρειάζεται αρχικά το πρόγραμμα και του δίνει και άλλη μέσω της malloc() (όταν το πρόγραμμα την καλέσει). Ο μόνος λόγος να «μένει» ένα πρόγραμμα από μνήμη είναι να έχει τελειώσει γενικά η μνήμη (το ελέγχεις με τη `free').

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Loipon ksanaekana to simulation kai to apotelesma pou pira einai to eksis :

 

terminate called after throwing an instance of 'std::bad_alloc'

what(): St9bad_alloc

 

 

Ayto einai endeiksi gia ti mnimi......etsi den einai??

 

Parakolouthousa oli tin wra tou simulation me to "top" pou mou eipes alla kai to "free" tin memory kai pote den perase panw apo 87% afinnonttas to ypoloipo (apo 1GB) synolika eleythero. Kapoia stigmi epese sto 66 me 67% kai tote stamatise to programma kai petakse ayto to error. Kamia idea??

 

Kai mia alli erwtisi... To "malloc" to kalei to programma apo mono tou i prepei na to valw egw???

 

P.S.: Paratirisa oti san entoli (oute san root) to malloc opws kai to valloc den yparxoun....

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η malloc() είναι συνάρτηση της C, με την οποία δεσμεύει ο προγραμματιστής μνήμη για ό,τι χρειάζεται. Δεν την καλείς εσύ, είναι ενσωματωμένη στο πρόγραμμα.

 

Το μήνυμα που σου βγάζει πάντως δείχνει ότι για κάποιο λόγο δεν μπορεί να γίνει memory allocation. Δύο ενδεχόμενα μου έρχονται στο μυαλό:

  • Να ζήτησε η εφαρμογή ένα κομμάτι μνήμης μεγαλύτερο από τη διαθέσιμη.
  • Να έχεις per process limit. Ρίξε μια ματιά στο `man limit'

 

Στην πρώτη περίπτωση δεν έχω ιδέα τι μπορείς να κάνεις.

Στη δεύτερη, απλά ορίζεις μεγαλύτερο όριο και είσαι εντάξει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Kati de paei kala....

 

otan grafw "man limit" bgainei to minima : No manual entry for limit

 

kai to "limit" san command den yparxei pouthena.....

 

Pistevw kai egw oti prepei na exei per process limit kai ayto tha ithela na allaksw

alla pws pou de doulevei to "limit"???

 

Kamia idea???

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

man limits.conf? (fedora sucks sometimes)

Btw, δεν είπα πουθενά ότι είναι εντολή ;-) (manpages δεν έχουν μόνο οι εντολές). Στο slack και το gentoo είναι το /etc/limits το αρχείο που ορίζει τα όρια. Στο fedora πρέπει να είναι κάτι σε limits.conf.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Νομιζω οτι η εντολή 'limit' δεν ειναι πρόγραμμα, αλλά shell built-in έντολη του 'csh' (c-shell). Για τα υπόλοιπα shells η αντοίστοιχη εντολή (shell built-in) είναι η 'ulimit'.

 

Εάν δεν δουλέψει, αυτο προσπάθησε να τρέξεις το πρόγραμμα σου χρησιμοποιώντας έναν debugger (π.χ. gdb).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...