Πξνγξακκαηηζκόο Θ. Δπλακηθή Δηαρείξηζε Μλήκεο. Κσλζηαληίλνο Τζεξπέο. (βαζηζκέλν ζηηο δηαθάλεηεο ηνπ θ. Δεκήηξε Μηραήι)

Σχετικά έγγραφα
Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Πξνγξακκαηηζκόο Ι. Δείθηεο. Κσλζηαληίλνο Τζεξπέο. (βαζηζκέλν ζηηο δηαθάλεηεο ηνπ θ. Δεκήηξε Μηραήι)

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

Πξνγξακκαηηζκόο Ι. Εγγξαθέο. Κσλζηαληίλνο Σζεξπέο. (βαζηζκέλν ζηηο δηαθάλεηεο ηνπ θ. Δεκήηξε Μηραήι)

Constructors and Destructors in C++

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

Δηζαγωγή ζηε γιώζζα C Παξνπζίαζε 3 ε : Δίζνδνο/ Έμνδνο - Σπλαξηήζεηο - Pointers

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

Γ ΣΑΞΖ ΔΝΗΑΗΟΤ ΛΤΚΔΗΟΤ ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΘΔΣΗΚΩΝ ΚΑΗ ΟΗΚΟΝΟΜΗΚΩΝ ΠΟΤΓΩΝ ΤΝΑΡΣΖΔΗ ΟΡΗΑ ΤΝΔΥΔΗΑ (έως Θ.Bolzano) ΘΔΜΑ Α

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ

ΘΔΜΑ 1 ο Μονάδες 5,10,10

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γευηέρα 11 Ηουνίου 2018 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ

f '(x)g(x)h(x) g'(x)f (x)h(x) h'(x) f (x)g(x)

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

ΗΥ-150 Πξνγξακκατησκόο Ταμηλόκεσε θαη Αλαδήτεσε

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

ΠΛΗ36. Άσκηση 1. Άσκηση 2. Οη δηεπζύλζεηο ησλ 4 σλ ππνδηθηύσλ είλαη νη αθόινπζεο. Υπνδίθηπν Α: /27 Υπνδίθηπν Β:

Ενδεικτικά Θέματα Στατιστικής ΙΙ

242 - Ειζαγωγή ζηοσς Η/Υ

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

ΑΠΛΟΠΟΙΗΗ ΛΟΓΙΚΩΝ ΤΝΑΡΣΗΕΩΝ ΜΕ ΠΙΝΑΚΕ KARNAUGH

Σύνθεζη ηαλανηώζεων. Έζησ έλα ζώκα πνπ εθηειεί ηαπηόρξνλα δύν αξκνληθέο ηαιαληώζεηο ηεο ίδηαο ζπρλόηεηαο πνπ πεξηγξάθνληαη από ηηο παξαθάησ εμηζώζεηο:

B-Δέλδξα. Τα B-δέλδξα ρξεζηκνπνηνύληαη γηα ηε αλαπαξάζηαζε πνιύ κεγάισλ ιεμηθώλ πνπ είλαη απνζεθεπκέλα ζην δίζθν.

ΜΑΘΗΜΑ / ΤΑΞΗ : ΗΛΕΚΤΡΟΛΟΓΙΑ/Γ ΛΥΚΕΙΟΥ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 08/09/2014

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

4) Να γξάςεηε δηαδηθαζία (πξόγξακκα) ζηε Logo κε όλνκα θύθινο πνπ ζα ζρεδηάδεη έλα θύθιν. Λύζε Γηα θύθινο ζηθ επαλάιαβε 360 [κπ 1 δε 1] ηέινο

Διαφορές μεταξύ αξιών και αναφορών #1

Αντισταθμιστική ανάλυση

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

(Ενδεικηικές Απανηήζεις) ΘΔΜΑ Α. Α1. Βιέπε απόδεημε Σει. 262, ζρνιηθνύ βηβιίνπ. Α2. Βιέπε νξηζκό Σει. 141, ζρνιηθνύ βηβιίνπ

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

ΣΥΣΤΗΜΑΤΑ ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ. 1. Να ιπζνύλ ηα ζπζηήκαηα. 1 0,3x 0,1y x 3 3x 4y 2 4x 2y ( x 1) 6( y 1) (i) (ii)

Άσκηση 1 - Μοπυοποίηση Κειμένου

x-1 x (x-1) x 5x 2. Να απινπνηεζνύλ ηα θιάζκαηα, έηζη ώζηε λα κελ ππάξρνπλ ξηδηθά ζηνπο 22, 55, 15, 42, 93, 10 5, 12

1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird

Άζθεζε 2ε ΤΣΗΜΑΣΑ ΔΛΔΓΥΟΤ ΑΝΟΙΚΣΟΤ ΒΡΟΥΟΤ ΚΑΙ MATLAB

ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ: έζησ

α) ηε κεηαηόπηζε x όηαλ ην ζώκα έρεη κέγηζην ξπζκό κεηαβνιήο ζέζεο δ) ην κέγηζην ξπζκό κεηαβνιήο ηεο ηαρύηεηαο

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 4 ΣΥΝΔΥΑΣΤΙΚΑ ΚΥΚΛΩΜΑΤΑ

Μονοψϊνιο. Αγνξά κε ιίγνπο αγνξαζηέο. Δύναμη μονοψωνίος Η ηθαλόηεηα πνπ έρεη ν αγνξαζηήο λα επεξεάζεη ηελ ηηκή ηνπ αγαζνύ.

ΜΑΘΗΜΑΣΑ ΦΩΣΟΓΡΑΦΙΑ. Ειζαγωγή ζηη Φωηογραθία. Χριζηάκης Σαζεΐδης EFIAP

ΔΝΓΔΙΚΣΙΚΔ ΛΤΔΙ ΣΑ ΜΑΘΗΜΑΣΙΚΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ 2017

x x x x tan(2 x) x 2 2x x 1

Έλαο πίνακας σσμβόλων ππνζηεξίδεη δύν βαζηθέο ιεηηνπξγίεο:

Intel Accelerate Your Code

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙΜΟ Α ΛΤΚΔΙΟΤ. Ημεπομηνία: 10/12/11 Ώπα εξέτασηρ: 09:30-12:30 ΠΡΟΣΔΙΝΟΜΔΝΔ ΛΤΔΙ

1. (Epp 30) Γξάςηε ηελ άξλεζε ησλ παξαθάησ ινγηθώλ πξνηάζεσλ:

Σήκαηα Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) ΕΙΣΑΓΨΓΗ ΣΤΙΣ ΤΗΛΕΠΙΚΟΙΝΨΝΙΕΣ

Επωηήζειρ Σωζηού Λάθοςρ ηων πανελλαδικών εξεηάζεων Σςναπηήζειρ

ΔΝΓΔΙΚΤΙΚΔΣ ΛΥΣΔΙΣ ΣΤΑ ΜΑΘΗΜΑΤΙΚΑ ΚΑΤΔΥΘΥΝΣΗΣ Γ ΛΥΚΔΙΟΥ ΓΔΥΤΔΡΑ 27 ΜΑΪΟΥ 2013

Πολυεπίπεδα/Διασυμδεδεμέμα Δίκτυα

Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) FritzBox Fon WLAN Annex B ( )

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Γ Γυμνασίου ΥΟΛΕΙΟ..

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

Η/Υ A ΤΑΞΕΩΣ ΑΕ Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γεσηέρα 10 Ηοσνίοσ 2019 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

Εξγαζηήξην Πιεξνθνξηθήο

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf

Εςθςή ζςζηήμαηα επισειπήζεων και αξιολόγηζη

Βάσεις Δεδομέμωμ. Δξγαζηήξην Ι. Τκήκα Πιεξνθνξηθήο ΑΠΘ

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

Ασκήσεις Οπτική και Κύματα

Η επιζκόπηζη ηης έμμιζθης ενηολής ζηην Αλλοδαπή. Καηεξίλα Γαιαλνπνύινπ, Intellectual Property Manager, Microsoft Ειιάο Α.Ε.

Κεθάλαιο 7. Πξνζθνξά ηνπ θιάδνπ Μ. ΨΥΛΛΑΚΗ

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report.

Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training. Dipl.Biol.cand.med. Stylianos Kalaitzis

7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ. 3. Έλαο θαηαρσξεηήο SISO ησλ 4 bits έρεη: α) Μία είζνδν, β) Δύν εηζόδνπο, γ) Σέζζεξεηο εηζόδνπο.

Οδηγίες τρήζης για λειηοσργία μεηαθοράς καναλιών ζε υηθιακό δέκηη OST-7060 HD

Ηλεκηπονικά Απσεία και Διεπαθέρ

Σηα παξαδείγκαηα πνπ αθνινπζνύλ ρξεζηκνπνηήζεθαλ ην JQUIZ, ην JCROSS θαη ην JMATCH, πνπ αλαιπηηθά πεξηγξάθνληαη παξαθάηω.

ΔΡΓΑΙΑ 1. Γιαδικησακά πληροθοριακά σζηήμαηα. Ομάδα Δργαζίας: Μεηαπηστιακοί Φοιηηηές. ηέθανος Κονηοβάς ΑΔΜ :283. Πάζτος Βαζίλειος ΑΔΜ :288

Image J Plugin particle tracker για παρακολούθηση της κίνησης σωματιδίων

Οργάνωση και Δομή Παρουσιάσεων

DOM. Γηδάζθνληεο: Π. Αγγειάηνο, Γ. Εήλδξνο Δπηκέιεηα δηαθαλεηώλ: Π. Αγγειάηνο. Σρνιή Ζιεθηξνιόγωλ Μεραληθώλ θαη Μεραληθώλ Υπνινγηζηώλ

ΣΟ ΤΣΖΜΑ ΔΛΑΣΖΡΗΟ - ΩΜΑ

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΕΚΦΩΝΗΣΕΙΣ. Διάρκεια: 3 ώρες Ημερομηνία: 12/5/2019 Έκδοση: 1 η. Τα sites blogs που συμμετέχουν (σε αλφαβητική σειρά):

ΓΗΜΟΙΑ ΟΙΚΟΝΟΜΙΚΗ ΣΟΜΟ Γ

Μορθές Κακόβοσλοσ Κώδικα (Malicious Code)

Δξγαιεία Καηαζθεπέο 1 Σάμε Δ Δ.Κ.Φ.Δ. ΥΑΝΗΩΝ ΠΡΩΣΟΒΑΘΜΗΑ ΔΚΠΑΗΓΔΤΖ. ΔΝΟΣΖΣΑ 2 ε : ΤΛΗΚΑ ΩΜΑΣΑ ΔΡΓΑΛΔΗΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Ογθνκεηξηθό δνρείν

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

ΑΡΥΔ ΟΙΚΟΝΟΜΙΚΗ ΘΔΩΡΙΑ ΛΤΔΙ ΓΙΑΓΩΝΙΜΑΣΟ ΚΔΦΑΛΑΙΟΤ 2

Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο κόζηος ανά μονάδα παραγωγής. Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο ζηαθερό κόζηος ανά μονάδα παραγωγής

Transcript:

Πξνγξακκαηηζκόο Θ Δπλακηθή Δηαρείξηζε Μλήκεο Κσλζηαληίλνο Τζεξπέο (βαζηζκέλν ζηηο δηαθάλεηεο ηνπ θ. Δεκήηξε Μηραήι) Τκήκα Πιεξνθνξηθήο θαη Τειεκαηηθήο Φαξνθόπεην Παλεπηζηήκην

Αλάγθε γηα Δπλακηθή Μλήκε Σηαηηθή Μλήκε Μέρξη ηώξα ρξεζηκνπνηνύζακε ζηαηηθή κλήκε, δειαδή ηα πξνγξάκκαηα καο ήμεξαλ από πξηλ (ηελ ώξα ηελ κεηαγιώηηηζεο) πόζε κλήκε ρξεηάδεηαη. Τη γίλεηαη όκσο όηαλ δελ μέξνπκε πόζε αθξηβώο κλήκε ρξεηαδόκαζηε; π.ρ. Θέινπκε λα γξάςνπκε έλα πξόγξακκα πνπ λα δηαβάδεη έλα ζύλνιν αθεξαίσλ από έλα αξρείν θαη λα ηνπο ηαμηλνκεί ζε κε-θζίλνπζα ζεηξά. Πόζνπο όκσο αθέξαηνπο; Φαξνθόπεην Παλεπηζηήκην 2/31

Stack θαη Heap Η κλήκε πνπ θαηαιακβάλεη έλα πξόγξακκα δηαρσξίδεηαη ζε δηάθνξα κέξε. Έλα θνκκάηη όπνπ θνξηώλεηαη ν θώδηθαο ηνπ πξνγξάκκαηνο καο Έλα θνκκάηη όπνπ βξίζθνληαη νη ζηαηηθέο κεηαβιεηέο Τελ ζηνίβα (stack) όπνπ απνζεθεύνληαη όιεο νη ηνπηθέο κεηαβιεηέο, νη παξάκεηξνη ησλ ζπλαξηήζεσλ, πξνζσξηλέο κεηαβιεηέο, θ.η.ι. Τνλ ζσξό (heap) όπνπ είλαη κλήκε πνπ κπνξνύκε λα ηελ δεζκεύζνπκε ή λα ηελ ειεπζεξώζνπκε θαηά ηελ δηάξθεηα ηνπ πξνγξάκκαηνο. code static data stack heap Φαξνθόπεην Παλεπηζηήκην 3/31

Δηαρείξηζε Μλήκεο Λεηηνπξγηθό Σύζηεκα Τελ δηαρείξηζε κλήκεο ηελ αλαιακβάλεη ην ιεηηνπξγηθό ζύζηεκα. Η C καο παξέρεη ζηελ βηβιηνζήθε ηεο, δηάθνξεο ζπλαξηήζεηο πνπ είλαη ππεύζπλεο ώζηε λα καο παξαρσξήζεη ην ιεηηνπξγηθό ζύζηεκα κλήκε. Η κέγηζηε κλήκε πνπ ην πξόγξακκα καο κπνξεί λα δεηήζεη έρεη λα θάλεη κε: ηελ ζπλνιηθή κλήκε ηνπ ζπζηήκαηνο, πόζε κλήκε είλαη δηαζέζηκε γηα πξνγξάκκαηα ρξεζηώλ, πόζα άιια πξνγξάκκαηα ηξέρνπλ ηαπηόρξνλα θαη πόζε κλήκε έρνπλ δεζκεύζεη. Φαξνθόπεην Παλεπηζηήκην 4/31

Ο Τειεζηήο sizeof() Γηα λα δεηήζνπκε κλήκε από ην ζύζηεκα πξέπεη λα μέξνπκε πόζε κλήκε ρξεηαδόκαζηε. Η C καο παξέρεη ηνλ ηειεζηή sizeof() ώζηε λα κπνξνύκε λα κάζνπκε πόζε κλήκε ζε bytes θαηαλαιώλνπλ νη δηάθνξνη ηύπνη ζηελ C. Φαξνθόπεην Παλεπηζηήκην 5/31

Ο Τειεζηήο sizeof() Παξαδείγκαηα 1 #include < s t d i o. h> 2 3 int main ( ) 4 { 5 printf ( "size of char in bytes = %lu\n", sizeof ( char ) ) ; 6 printf ( "size of int in bytes = %lu\n", sizeof ( int ) ) ; 7 printf ( "size of long in bytes = %lu\n", sizeof ( long ) ) ; 8 printf ( "size of double in bytes = %lu\n", sizeof ( double ) ) ; 9 printf ( "size of void* in bytes = %lu\n", sizeof ( void * ) ) ; 10 11 return 0 ; 12 } κε έμνδν (ζην ζύζηεκα ηνπ νκηιεηή) size of char in bytes = 1 size of int in bytes = 4 size of long in bytes = 8 size of double in bytes = 8 size of void* in bytes = 8 Φαξνθόπεην Παλεπηζηήκην 6/31

Ο Τειεζηήο sizeof() Παξαδείγκαηα 1 #include < s t d i o. h> 2 3 typedef struct { 4 long AM ; 5 char name [ 5 6 ] ; 6 } student ; 7 8 int main ( ) 9 { 10 printf ( "size of student in bytes = %lu\n", sizeof ( student ) ) ; 11 return 0 ; 12 } κε έμνδν (ζην ζύζηεκα ηνπ νκηιεηή) size of student in bytes = 64 Φαξνθόπεην Παλεπηζηήκην 7/31

Ο Τειεζηήο sizeof() Παξαδείγκαηα Πξνζνρή κε ην κέγεζνο ελόο struct γηαηί πνιιέο θνξέο ν κεηαγισηηηζηήο πξνζζέηεη επηπιένλ bytes ζην ηέινο ώζηε λα βειηηζηνπνηήζεη ηελ αληηγξαθή (νη ιεπηνκέξεηεο εμαξηώληαη από ηελ CPU, ην ιεηηνπξγηθό θαη ηνλ κεηαγισηηηζηή). 1 #include < s t d i o. h> 2 3 typedef struct { 4 long AM ; 5 char name [ 5 0 ] ; 6 } student ; 7 8 int main ( ) 9 { 10 printf ( "size of student in bytes = %lu\n", sizeof ( student ) ) ; 11 12 return 0 ; 13 } ην παξαπάλσ πξόγξακκα ελώ ζα έπξεπε λα ηππώλεη 58, ζην ζύζηεκα ηνπ νκηιεηή ηππώλεη size of student in bytes = 64 Φαξνθόπεην Παλεπηζηήκην 8/31

Ο Τειεζηήο sizeof() Ωο ηώξα δώζακε ζηνλ ηειεζηή sizeof() ηύπνπο δεδνκέλσλ. Μπνξνύκε όκσο λα δώζνπκε θαη κεηαβιεηέο. 1 #include < s t d i o. h> 2 3 int main ( ) 4 { 5 double x ; 6 double a [ 3 0 ] ; 7 8 printf ( "size of x in bytes = %lu\n", sizeof ( x ) ) ; 9 printf ( "size of a in bytes = %lu\n", sizeof ( a ) ) ; 10 11 return 0 ; 12 } size of x in bytes = 8 size of a in bytes = 240 Φαξνθόπεην Παλεπηζηήκην 9/31

Ο Τειεζηήο sizeof() Πξνζνρή κε ηνπο δείθηεο θαη ηνπο πίλαθεο. 1 #include < s t d i o. h> 2 3 int main ( ) 4 { 5 double a [ 3 0 ] ; 6 double * p = a ; 7 8 printf ( "size of a in bytes = %lu\n", sizeof ( a ) ) ; 9 printf ( "size of p in bytes = %lu\n", sizeof ( p ) ) ; 10 11 return 0 ; 12 } size of a in bytes = 240 size of p in bytes = 8 Φαξνθόπεην Παλεπηζηήκην 10/31

Ο Τειεζηήο sizeof() Πξνζνρή κε ηνπο δείθηεο θαη ηνπο πίλαθεο. 1 #include < s t d i o. h> 2 3 void printarray ( double a [ 3 0 ] ) { 4 // 5 6 printf ( "size of a in bytes = %lu\n", sizeof ( a ) ) ; 7 } 8 9 int main ( ) 10 { 11 double a [ 3 0 ] ; 12 13 printf ( "size of a in bytes = %lu\n", sizeof ( a ) ) ; 14 printarray ( a ) ; 15 16 return 0 ; 17 } size of a in bytes = 240 size of a in bytes = 8 Θπκεζείηε πσο ζε κία ζπλάξηεζε πεξλάκε κόλν ηελ δηεύζπλζε ελόο πίλαθα σο παξάκεηξν. Φαξνθόπεην Παλεπηζηήκην 11/31

Πξνηεξαηόηεηα Τειεζηώλ 1 2 3 4 5 6 7 8 9 παρενθέζεις: () []. > expr++ expr Υπνινγίδνληαη πξώηα, από ηα αξηζηεξά πξνο ηα δεμηά. Εάλ ππάξρνπλ έλζεηεο ππνινγίδνληαη πξώηα νη εζσηεξηθέο. μοναδιαίοι ηελεζηές: + ++expr expr! * & sizeof Υπνινγίδνληαη από δεμηά πξνο ηα αξηζηεξά. πολλαπλαζιαζμός, διαίρεζη και σπόλοιπο: * / % Υπνινγίδνληαη δεύηεξα από αξηζηεξά πξνο ηα δεμηά. πρόζθεζη, αθαίρεζη: + Εάλ ππάξρνπλ πνιινί, ππνινγίδνληαη από ηα αξηζηεξά πξνο ηα δεμηά. Στεζιακοί: < > <= >= Υπνινγίδνληαη από ηα αξηζηεξά πξνο ηα δεμηά. Ιζόηηηας: ==!= Υπνινγίδνληαη από ηα αξηζηεξά πξνο ηα δεμηά. λογικό AND: && Από αξηζηεξά πξνο ηα δεμηά. λογικό OR: Από αξηζηεξά πξνο ηα δεμηά. εκτώρηζης: = += = *= /= %= Από δεμηά πξνο ηα αξηζηεξά. Φαξνθόπεην Παλεπηζηήκην 12/31

Η ζπλάξηεζε malloc() Η ζπλάξηεζε malloc είλαη νξηζκέλε ζην αξρείν stdlib.h θαη είλαη ππεύζπλε γηα ηελ δεκηνπξγία κλήκεο ζηνλ ζσξό (heap). void* malloc(size_t size) παίξλεη σο είζνδν ην κέγεζνο κλήκεο πνπ ζέινπκε λα δεζκεύζνπκε ζε bytes, ζε πεξίπησζε επηηπρίαο επηζηξέθεη έλαλ δείθηε ζηε δηεύζπλζε κλήκεο πνπ δεζκεύηεθε, εαλ ε κλήκε δελ δεζκεύηεθε (π.ρ δελ ππάξρεη άιιε ειεύζεξε κλήκε ζην ζύζηεκα) επηζηξέθεη NULL. Φαξνθόπεην Παλεπηζηήκην 13/31

Δείθηεο ζε Τύπν void Μεηαηξνπή (casting) Η ζπλάξηεζε malloc επηζηξέθεη έλα δείθηε ζε ηύπν void. Ο πξνγξακκαηηζηήο πξέπεη ζηελ ζπλέρεηα λα κεηαηξέςεη ζηνλ ηύπν πνπ ρξεηάδεηαη (casting). 1 2 3 4 5 6 7 8 9 10 11 #include < s t d i o. h> #include < s t d l i b. h> int main ( ) { int * x = ( int * ) malloc ( sizeof ( int ) ) ; } return 0 ; // Ο παξαπάλσ θώδηθαο θηηάρλεη έλαλ αθέξαην. Φαξνθόπεην Παλεπηζηήκην 14/31

Type Casting Η κεηαηξνπή κηαο έθθξαζεο ελόο ηύπνπ ζε έλαλ άιιν. 1 έκκεζε κεηαηξνπή Γίλνληαη απηόκαηα όηαλ κηα ηηκή αληηγξάθεηαη ζε έλαλ ζπκβαηό ηύπν. short a = 2000; int b = a ; Επηηξέπεηαη κόλν αλ δελ ράλεηαη πιεξνθνξία. 2 άκεζε κεηαηξνπή Υπνδεηθλύνπκε εκείο ηελ κεηαηξνπή. float a = 5. 2 5 ; int b = ( int ) a ; Πξνζνρή κε ηελ ρξήζε ησλ typecasts, πνιιέο θνξέο νδεγνύλ ζε πνιύ δπζεύξεηα ιάζε. Φαξνθόπεην Παλεπηζηήκην 15/31

Πξνηεξαηόηεηα Τειεζηώλ 1 2 3 4 5 6 7 8 9 παρενθέζεις: () []. > expr++ expr Υπνινγίδνληαη πξώηα, από ηα αξηζηεξά πξνο ηα δεμηά. Εάλ ππάξρνπλ έλζεηεο ππνινγίδνληαη πξώηα νη εζσηεξηθέο. μοναδιαίοι ηελεζηές: + ++expr expr! * & sizeof (typecast) Υπνινγίδνληαη από δεμηά πξνο ηα αξηζηεξά. πολλαπλαζιαζμός, διαίρεζη και σπόλοιπο: * / % Υπνινγίδνληαη δεύηεξα από αξηζηεξά πξνο ηα δεμηά. πρόζθεζη, αθαίρεζη: + Εάλ ππάξρνπλ πνιινί, ππνινγίδνληαη από ηα αξηζηεξά πξνο ηα δεμηά. Στεζιακοί: < > <= >= Υπνινγίδνληαη από ηα αξηζηεξά πξνο ηα δεμηά. Ιζόηηηας: ==!= Υπνινγίδνληαη από ηα αξηζηεξά πξνο ηα δεμηά. λογικό AND: && Από αξηζηεξά πξνο ηα δεμηά. λογικό OR: Από αξηζηεξά πξνο ηα δεμηά. εκτώρηζης: = += = *= /= %= Από δεμηά πξνο ηα αξηζηεξά. Φαξνθόπεην Παλεπηζηήκην 16/31

Η ζπλάξηεζε free() Ο πξνγξακκαηηζηήο είλαη ππεύζπλνο λα ειεπζεξώζεη ηελ κλήκε πνπ δέζκεπζε κε ηελ ρξήζε ηεο ζπλάξηεζεο: void free ( void * ptr ) ; Η ζπλάξηεζε ειεπζεξώλεη ηελ κλήκε πνπ δείρλεη ν δείθηεο ptr θαη έρεη δεζκεπηεί κε ηελ malloc(). Γηα θάζε θιήζε ηεο malloc() πξέπεη λα ππάξρεη θαη κία θιήζε ηεο free(). Φαξνθόπεην Παλεπηζηήκην 17/31

Παξάδεηγκα Φξήζεο ηεο malloc() Δεκηνπξγία struct 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 4 typedef struct { 5 int AM ; 6 char name [ 5 0 ] ; 7 } student ; 8 9 int main ( ) 10 { 11 student * x = ( student * ) malloc ( sizeof ( student ) ) ; 12 13 // use x 14 15 free ( x ) ; 16 return 0 ; 17 } Φαξνθόπεην Παλεπηζηήκην 18/31

Δεκηνπξγία Πίλαθα Η δεκηνπξγία δπλακηθνύ πίλαθα γίλεηαη δεηώληαο από ηελ malloc() έλα πνιιαπιάζην ζε bytes ηνπ ηύπνπ πνπ ζέινπκε. 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 4 int main ( ) 5 { 6 int n = 100, i, * array ; 7 8 array = ( int * ) malloc ( n * sizeof ( int ) ) ; 9 10 for ( i = 0; i < n; i++) 11 array [ i ] = i*i; 12 for ( i = 0; i < n; i++) 13 printf ( "%d ", array [ i ] ) ; 14 15 free ( array ) ; 16 17 return 0 ; 18 } Πξνζνρή ε κλήκε πνπ επηζηξέθεη ε malloc() δελ έρεη αξρηθνπνηεζεί. Φαξνθόπεην Παλεπηζηήκην 19/31

Παξάδεηγκα Φξήζεο ηεο malloc() Δεκηνπξγία Πίλαθα 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 4 typedef struct { 5 int AM ; 6 char name [ 5 0 ] ; 7 } student ; 8 9 int main ( ) 10 { 11 int n = 100, i ; 12 student * array = ( student * ) malloc ( n * sizeof ( student ) ) ; 13 14 // use array 15 16 free ( array ) ; 17 return 0 ; 18 } Φαξνθόπεην Παλεπηζηήκην 20/31

Δηαξξνή Μλήκεο Memory Leaks Δηαξξνή κλήκεο έρνπκε εαλ μεράζνπκε λα ειεπζεξώζνπκε ηελ κλήκε πνπ δεζκεύζακε. Η κλήκε απηή παξακέλεη άρξεζηε κέρξη ην ιεηηνπξγηθό ζύζηεκα λα ηελ ειεπζεξώζεη. Είλαη ζπλεζηζκέλε αηηία πξνβιεκάησλ πξνγξακκαηηζκνύ. Έλα πξόγξακκα κε δηαξξνή κλήκεο δεκηνπξγεί πξνβιήκαηα ζην ζύζηεκα θαη έρεη κεγάιεο πηζαλόηεηεο λα ηεξκαηηζηεί πξόσξα. Φαξνθόπεην Παλεπηζηήκην 21/31

Πίλαθαο κε Δείθηεο Δείθηεο ζε Δείθηεο Γηα λα θηηάμνπκε δπλακηθά έλαλ πίλαθα κε δείθηεο ρξεηαδόκαζηε έλα δείθηε πνπ λα δείρλεη ζε ηύπν δείθηε. Όηαλ γξάθνπκε int * p ; δειώλνπκε έλα δείθηε κε όλνκα p πνπ δείρλεη ζε ηύπν αθέξαην. Αληίζηνηρα γξάθνπκε int * * p ; γηα δειώλνπκε έλα δείθηε κε όλνκα p πνπ λα δείρλεη ζε ηύπν δείθηε ζε αθέξαην. Θα κπνξνύζακε λα ην γξάθακε σο int* *p γηα λα είλαη πην ζαθέο. Φαξνθόπεην Παλεπηζηήκην 22/31

Πίλαθαο κε Δείθηεο Δείθηεο ζε Δείθηεο Γηα λα θηηάμνπκε δπλακηθά έλαλ πίλαθα κε δείθηεο ρξεηαδόκαζηε έλα δείθηε πνπ λα δείρλεη ζε ηύπν δείθηε. int * * ptrarray = ( int * * ) malloc(100 * sizeof ( int * ) ) ; Ζεηάκε από ηελ malloc() λα καο επηζηξέςεη έλα πίλαθα κε κέγεζνο 100 επί ην κέγεζνο πνπ θαηαλαιώλεη έλαο δείθηεο ζε αθέξαην. Κάζε ζηνηρείν π.ρ ptrarray[4] είλαη έλαο δείθηεο ζε αθέξαην. Φαξνθόπεην Παλεπηζηήκην 23/31

Πίλαθαο κε Δείθηεο Δείθηεο ζε Δείθηεο Γηα λα θηηάμνπκε δπλακηθά έλαλ πίλαθα κε δείθηεο ρξεηαδόκαζηε έλα δείθηε πνπ λα δείρλεη ζε ηύπν δείθηε. int * * ptrarray = ( int * * ) malloc(100 * sizeof ( int * ) ) ; ptrarray Φαξνθόπεην Παλεπηζηήκην 23/31

Δηδηάζηαηνο Δπλακηθόο Πίλαθαο Γηα λα θηηάμνπκε έλα δπλακηθό δηδηάζηαην πίλαθα θηηάρλνπκε πξώηα έλα πίλαθα κε δείθηεο. Απηόο ν πίλαθαο αληηζηνηρεί ζηηο γξακκέο ηνπ δηδηάζηαηνπ πίλαθα. a int * * a = ( int * * ) malloc(100 * sizeof ( int * ) ) ; Σηελ ζπλέρεηα θηηάρλνπκε έλα πίλαθα γηα θάζε γξακκή. for ( i = 0; i< 100; i++) a[i] = ( int * ) malloc(50 * sizeof ( int ) ) ; a[i] Φαξνθόπεην Παλεπηζηήκην 24/31

Δηδηάζηαηνο Δπλακηθόο Πίλαθαο a Γξάθνληαο a[i] καο επηζηξέθεηαη έλαο δείθηεο. Γξάθνληαο a[i ][ j] καο επηζηξέθεηαη ν αθέξαηνο πνπ αληηζηνηρεί ζηελ ζέζε i, j ηνπ πίλαθα. a[i] a[i][j] Γηαηί; Θπκεζείηε πσο ν κεηαγισηηηζηήο κεηαηξέπεη ην a[i] ζε *(a+i). Η έθθξαζε a[i ][ j] κεηαηξέπεηαη ζε *(*( a+i)+j). Φαξνθόπεην Παλεπηζηήκην 25/31

Δηδηάζηαηνο Δπλακηθόο Πίλαθαο Δεκηνπξγία θαη θαηαζηξνθή δηδηάζηαηνπ πίλαθα. #include < s t d l i b. h> main ( ) { int i, **a; a = (int**) malloc(100 * sizeof ( int * ) ) ; for ( i = 0; i < 100; i++) a[i] = ( int * ) malloc(50 * sizeof ( int ) ) ; / / here we can use the 100x50 array // a[ i ][ j ] is element at row i and column j for ( i = 0; i < 100; i++) free ( a [ i ] ) ; free ( a ) ; } return 0 ; Ειεπζεξώλνπκε ηελ κλήκε κε ηελ αληίζηξνθε ζεηξά. Φαξνθόπεην Παλεπηζηήκην 26/31

Σπρλά Λάζε Έιεγρνο Τηκήο Επηζηξνθήο malloc() Η malloc() επηζηξέθεη είηε ηελ κλήκε πνπ δεζκεύηεθε είηε NULL ζε πεξίπησζε πνπ έγηλε ιάζνο. Πξέπεη πάληα λα ειέγρνπκε ηελ ηηκή επηζηξνθήο Σε πεξίπησζε πνπ ην ιεηηνπξγηθό δελ έρεη δηαζέζηκε κλήκε ε malloc() ζα επηζηξέςεη NULL. Εάλ δελ θάλνπκε έιεγρν, κόιηο πξνζπειάζνπκε απηόλ ηνλ δείθηε ην πξόγξακκα καο ζα ηεξκαηηζηεί βίαηα. Φαξνθόπεην Παλεπηζηήκην 27/31

Σπρλά Λάζε Έιεγρνο Τηκήο Επηζηξνθήο malloc() #include < s t d i o. h> #include < s t d l i b. h> int main ( ) { int * x = ( int * ) malloc(100 * sizeof ( int ) ) ; x[3] = 15; free ( x ) ; return 0 ; } Εάλ ε malloc() επηζηξέςεη NULL ηόηε ζα εθηειεζηεί ν παξαθάησ θώδηθαο πνπ πξνθαιεί βίαην ηεξκαηηζκό. #include < s t d i o. h> #include < s t d l i b. h> int main ( ) { int * x = 0; x[3] = 15; free ( x ) ; return 0 ; } / / ERROR! Φαξνθόπεην Παλεπηζηήκην 28/31

Σπρλά Λάζε Έιεγρνο Τηκήο Επηζηξνθήο malloc() Ο ζσζηόο ηξόπνο ρξήζεο ηεο ζπλάξηεζεο malloc() είλαη ινηπόλ: #include < s t d i o. h> #include < s t d l i b. h> int main ( ) { int * x = ( int * ) malloc(100 * sizeof ( int ) ) ; if ( x == NULL ) { fprintf ( stderr, "Could not allocate memory!" ) ; abort ( ) ; } } x[3] = 15; free ( x ) ; return 0 ; Φαξνθόπεην Παλεπηζηήκην 29/31

Σπρλά Λάζε Πνιιαπιή Κιήζε ηεο free() Η θιήζε ηεο ζπλάξηεζεο free( ptr ) ειεπζεξώλεη ηελ κλήκε πνπ δείρλεη ν δείθηεο ptr. Απηή ε κλήκε πξέπεη λα έρεη πξσηύηεξα δεζκεπηεί κε ηελ ρξήζε ηεο malloc(). Σε πεξίπησζε πνπ ε κλήκε πνπ δείρλεη ν ptr έρεη ήδε ειεπζεξσζεί από κηα πξνεγνύκελε θιήζε ηεο free() ε ζπκπεξηθνξά ηνπ πξνγξάκκαηνο είλαη απξόβιεπηε. Φαξνθόπεην Παλεπηζηήκην 30/31

Σπρλά Λάζε Πνιιαπιή Κιήζε ηεο free() Σε πεξίπησζε πνπ ε κλήκε πνπ δείρλεη ν ptr έρεη ήδε ειεπζεξσζεί από κηα πξνεγνύκελε θιήζε ηεο free() ε ζπκπεξηθνξά ηνπ πξνγξάκκαηνο είλαη απξόβιεπηε. #include < s t d i o. h> #include < s t d l i b. h> int main ( ) { int * x = ( int * ) malloc(100 * sizeof ( int ) ) ; if (!x) { fprintf ( stderr, "Cannot allocate memory!" ) ; abort ( ) ; } } free ( x ) ; free ( x ) ; return 0 ; / / ERROR! undefined behavior Φαξνθόπεην Παλεπηζηήκην 31/31