Δημοσιεύτηκε: 30 Μαρ 2011, 00:26
από linuxs
Στο αρχικό πρόγραμμα! Μια πρώτη ανάλυση είναι η απρακάτω:

Κώδικας: Επιλογή όλων
#include <stdio.h> /* προσθήκη της βασικής βιβλιοθήκης */

int calculate(void)
{
int i;
int p[9]; /* Ορισμός ενός 'πίνακα' 9 θέσεων! */
/* Τα στοιχεία του είναι απο [0 - 8] */
for(i=0; i<=3; i++) /* εκτέλεση μιας επανάληψης απο 0 έως ΚΑΙ 3 */
{
if(sizeof(int*) == 8) /* 64μπιτο σύστημα */
{
printf("64bit system!\n");
p[i*6 + 2] += 15;
printf("-> access possition: %d | write possition: %d\n", i*6+2, p[i*6+2]);
}else{ /* 32μπιτο σύστημα */
printf("32bit system!\n");
p[i*3 + 2] += 16;
printf("-> access possition: %d | write possition: %d\n", i*3 + 2, p[i*6+2]);
}
}
}

int main() /* κυρίως συνάρτηση*/
{
calculate(); /* καλούμε την calculate */
printf("Hello, World!\n"); /* εκτύπωση του μηνύματος */

return 0; /* επιστροφή του μηδενός */
}

/* =================================
Επιπλέον πληροφορίες...
===================================*/
/*
Σχετικά με το sizeof(): το sizeof() είναι μια συνάρτηση που μας επιστρέφει το μέγεθος των bytes στο
παράδειγμά μας των ακεραίων. Οπότε, στην *10* γραμμή τσεκάρουμε αν το μέγεθος των bytes των ακεραίων είναι 8.
Χωρίς να είμαι ΑΠΟΛΥΤΩΣ σίγουρος φαντάζομαι πως το μέγεθος που ένα σύστημα έχει καθορίσει για τους ακεραίους
αλλάζει απο 32μπιτο σε 64μπιτο. Οπότε στον 64μπιτο θα είναι 8. Απο εκεί και πέρα στην 12 και 14 γραμμή προσπαθούμε
να προσπελάσουμε κάποια ΔΙΑΦΟΡΕΤΙΚΑ κελιά με την χρήση του loop(που εκτελείται παραλληλα). Εάν δώσουμε λίγο
περισσότερο βαρύτητα στις τιμές που παίρνει θα δούμε οτι οι πιθανές τιμές για 64μπιτο είναι: 2,8,14,20 και στον
32μπιτο αντίστοιχα: 2,5,8,11. Μπορούμε πολύ εύκολα να δούμε οτι καθώς τρέχει το loop βγαίνουμε έξω απο τα όρια του πίνακα.
Γι' αυτό άλλωστε μας απιστρέφει και σκουπίδια.
*/


Απορίες:
Το * στο sizeof γιατί χρησιμοποιείται;;;

ευχαριστώ...