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

adrese node-ova u povez.listi

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

[ Pregleda: 933 | Odgovora: 2 ]

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

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
16.04.2004. u 23:29 

NastyBoy
Bojan Nastic
UK

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

Sajt: www.frd.co.uk


Profil

icon Re: adrese node-ova u povez.listi16.04.2004. u 23:51
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"

"The rational prisoner exploits the weak places, creates order from chaos: instead, collectives like the FSF vindicate their jailers by building cells almost compatible with the existing ones, albeit with more features."
16.04.2004. u 23:51 

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


Profil

icon Re: adrese node-ova u povez.listi16.04.2004. u 23:57
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
16.04.2004. u 23:57 

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

[ Pregleda: 933 | Odgovora: 2 ]

Postavi temu Odgovori

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