Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

adrese node-ova u povez.listi

[es] :: C/C++ programiranje :: adrese node-ova u povez.listi

[ Pregleda: 2847 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pretender

Član broj: 12407
Poruke: 100
*.ppp-bg.sezampro.yu



Profil

icon adrese node-ova u povez.listi16.04.2004. u 23:29 - pre 243 meseci
Hi
Code:
//: S04:LinkedList.cpp
#include <iostream>
#include <cassert>
using namespace std;

struct Node {
    int val;
    Node* next;
};

void create(Node* head, int howMany) {
    assert(head);
    Node* p1 = head;
    for (int i = 1; i < howMany; ++i) {
        Node* p2 = new Node;
        p2->val = i;
        p1->next = p2;
        p1 = p2;    
    }
    p1->next = 0;   
}

void display(Node* node) {
    assert(node);
    while (node) {
        cout << node->val << " (at " << (long)node << ")\n";
        node = node->next;
    }
}

void cleanup(Node* node) {
    if (node) {
        cleanup(node->next);
        cout << "deleting Node at " << (long)node << endl;
        delete node;
    }
}

int main() {
    Node* head = new Node;
    head->val = 0;
    create(head, 10);
    display(head);
    cout << endl << "sizeof(head)== " << sizeof(head) << endl;
    cleanup(head);

getchar();
}


0 (at 4007016)
1 (at 4007080)
2 (at 4007096)
3 (at 4007112)
4 (at 4007128)
5 (at 4007144)
6 (at 4007160)
7 (at 4007176)
8 (at 4007192)
9 (at 4007208)

sizeof(head)== 4
deleting Node at 4007208
deleting Node at 4007192
deleting Node at 4007176
deleting Node at 4007160
deleting Node at 4007144
deleting Node at 4007128
deleting Node at 4007112
deleting Node at 4007096
deleting Node at 4007080
deleting Node at 4007016

Ovde su 3 nejasnoce.
1. Kako je velicina node-a 4 bajta, kada pored integera(val) mora negde da se smesti i adresa(next) ?
2. Ako je vec velicina 4, odakle onda razlika memorijskih adresa node-ova 16 ?
3. Ako je vec ta razlika 16, odakle onda razlika izmedju head-a i drugog node-a 64 ?

TX
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.winn.dial.virgin.net



+4 Profil

icon Re: adrese node-ova u povez.listi16.04.2004. u 23:51 - pre 243 meseci
1. Kako je velicina node-a 4 bajta, kada pored integera(val) mora negde da se smesti i adresa(next) ?

- Greshish, sizeof(head) je velichina POINTERA koji je 4 bajta, ne velichina strukture. Trebalo je sizeof(Node)

2. i 3.

- 16 bajtova je verovatno default alignement za tvoju strukturu. Znachi da ce i alokator da zauzima memoriju zaokruzhenu na 16 bajotva.
U osnovi, ne mozhesh da ochekujesh od alokatora da ti daje uvek memoriju "pakovanu" i redom. Sve zavisi od trenutne memorijske "slike"
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.ptt.yu

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: adrese node-ova u povez.listi16.04.2004. u 23:57 - pre 243 meseci
1. head je pointer na nod. Zato sizeof(head) daje veličinu pointera. sizeof(*head) daje ono što ti treba.

2. U svetlu odgovora na br. 1 ...

3. Ovo je interna stvar alokatora. Ne treba da brineš o memorijskoj slici.

f
 
Odgovor na temu

[es] :: C/C++ programiranje :: adrese node-ova u povez.listi

[ Pregleda: 2847 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.