idet2 Δημοσ. 18 Αυγούστου 2005 Δημοσ. 18 Αυγούστου 2005 Πως μπορώ να δω πόση μνήμη καταναλώνει ένα προγραμμα???? Τρέχω κάποια simulations και όταν ανεβαίνει η πολυπλοκότητα μάλλον δεν έχει άλλη διαθέσιμη μνήμη. Θα ήθελα αν γίνεται να μου πει κάποιος πως μπορώ να κάνω allocate τη διαθέσιμη μνήμη του μηχανήματος μου σε αυτό το πρόγραμμα γιατί από ότι καταλαβαίνω το Linux κάνει στην αρχή allocate ένα μέρος της μνήμης σε κάθε πρόγραμμα και θα ήθελα να το αλλάξω αυτό. Ευχαριστώ Edit : Ξέχασα να πω ότι τρέχω Fedora Core 4
apoikos Δημοσ. 18 Αυγούστου 2005 Δημοσ. 18 Αυγούστου 2005 Το πόση μνήμη καταναλώνει ένα πρόγραμμα μπορείς να το δεις είτε με το top είτε με την εντολή ps aux. Κοιτάς το RSS για τη φυσική μνήμη που καταναλώνει και το VSIZE για τη συνολική. Ο πυρήνας προφανώς κάνει σωστό memory allocation και δεν μπορείς να το αλλάξεις αυτό. Δεσμεύει όση μνήμη χρειάζεται αρχικά το πρόγραμμα και του δίνει και άλλη μέσω της malloc() (όταν το πρόγραμμα την καλέσει). Ο μόνος λόγος να «μένει» ένα πρόγραμμα από μνήμη είναι να έχει τελειώσει γενικά η μνήμη (το ελέγχεις με τη `free').
idet2 Δημοσ. 18 Αυγούστου 2005 Μέλος Δημοσ. 18 Αυγούστου 2005 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....
apoikos Δημοσ. 18 Αυγούστου 2005 Δημοσ. 18 Αυγούστου 2005 Η malloc() είναι συνάρτηση της C, με την οποία δεσμεύει ο προγραμματιστής μνήμη για ό,τι χρειάζεται. Δεν την καλείς εσύ, είναι ενσωματωμένη στο πρόγραμμα. Το μήνυμα που σου βγάζει πάντως δείχνει ότι για κάποιο λόγο δεν μπορεί να γίνει memory allocation. Δύο ενδεχόμενα μου έρχονται στο μυαλό: Να ζήτησε η εφαρμογή ένα κομμάτι μνήμης μεγαλύτερο από τη διαθέσιμη. Να έχεις per process limit. Ρίξε μια ματιά στο `man limit' Στην πρώτη περίπτωση δεν έχω ιδέα τι μπορείς να κάνεις. Στη δεύτερη, απλά ορίζεις μεγαλύτερο όριο και είσαι εντάξει.
idet2 Δημοσ. 18 Αυγούστου 2005 Μέλος Δημοσ. 18 Αυγούστου 2005 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???
idet2 Δημοσ. 18 Αυγούστου 2005 Μέλος Δημοσ. 18 Αυγούστου 2005 Oti kai na valw sxetiko me to limit* den yparxei san command.....(kai gia ta manual synexizei kai leei no manual entry.....)
apoikos Δημοσ. 18 Αυγούστου 2005 Δημοσ. 18 Αυγούστου 2005 man limits.conf? (fedora sucks sometimes) Btw, δεν είπα πουθενά ότι είναι εντολή ;-) (manpages δεν έχουν μόνο οι εντολές). Στο slack και το gentoo είναι το /etc/limits το αρχείο που ορίζει τα όρια. Στο fedora πρέπει να είναι κάτι σε limits.conf.
pinball_elf Δημοσ. 22 Αυγούστου 2005 Δημοσ. 22 Αυγούστου 2005 Νομιζω οτι η εντολή 'limit' δεν ειναι πρόγραμμα, αλλά shell built-in έντολη του 'csh' (c-shell). Για τα υπόλοιπα shells η αντοίστοιχη εντολή (shell built-in) είναι η 'ulimit'. Εάν δεν δουλέψει, αυτο προσπάθησε να τρέξεις το πρόγραμμα σου χρησιμοποιώντας έναν debugger (π.χ. gdb).
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.