[pso] [tema1] syscall_arg[0]

Maximilian Machedon maximilian.machedon at gmail.com
Thu Apr 3 18:17:33 EEST 2008


Cu alte cuvinte:

* nu e pointer acolo din cauza pe care a zis-o Cosmin: vrei sa economisesti
memorie si sa nu o fragmentezi

* se implementeaza asa (sintactic) din cauzele spuse de Lucian si de mine

:-P

2008/4/3 Maximilian Machedon <maximilian.machedon at gmail.com>:

> In C/C++ compilatorul interpreteaza folosirea numelui unui vector ca pe
> folosirea unui pointer la primul element al vectorului. Insa acel nume de
> vector nu are efecte decat la compilare deoarece nu este un pointer adevarat
> si nu se gaseste nicaieri in memorie la rulare.
>
> Un vector cu 0 elemente nu are un prim element, dar o "extensie" a
> limbajului face compilatorul sa se prefaca ca aveai acolo un element, dar sa
> raporteze sizeof ca si cum nu ar fi niciunul. Ar fi fost mai standard si mai
> curat sa fie un vector cu un element si sa se scada 1 din sizeof cand e
> nevoie (dar atunci ai fi pierdut un element in situatiile in care de fapt
> aveai nevoie de 0 elemente in plus).
> Chestia cu vectorul de la capatul structurii se foloseste pentru
> comoditate in programare. Daca vrei sa aplici trucul de alocare a memoriei
> prezentat de Lucian, ai avantajul folosirii asa:
>
> struct generic_X * a = malloc(sizeof(struct generic_X) + 100);
>  a->x[0] = 'b';
> a->x[99] = '\0';
>
> in loc de asa:
>
>  struct generic_X * a = malloc(sizeof(struct generic_X) + 100);
> (char *)((unsigned char *)a + sizeof(struct generic_X)) + 0 = 'b';
>  (char *)((unsigned char *)a + sizeof(struct generic_X)) + 99 = '\0';
>
> In afara de "sintactic sugar", trucul te scuteste de calculat alinieri in
> memorie pentru diverse tipuri de date.
>
> Max
>
>
>  2008/4/3 Dragos Tarcatu <tarcatu_dragosh at yahoo.com>:
>
> >  Salut,
> >
> > Nu prea am inteles pe windows structura std definita in sci_win.h pentru
> > tipul tabelei de apeluri de sistem. Ma refer aici la acel camp definit ca:
> >
> >     int syscall_arg[0];
> >
> > Din cate am inteles functioneaza ca un fel de pointer, in sensul ca se
> > foloseste pentru a avea o dimensiune variabila, cu alocare de memorie in
> > prealabil ... deci de aici intrebarea : de ce nu int *syscall_arg?
> >
> >   ------------------------------
> > You rock. That's why Blockbuster's offering you one month of Blockbuster
> > Total Access<http://us.rd.yahoo.com/evt=47523/*http://tc.deals.yahoo.com/tc/blockbuster/text5.com>,
> > No Cost.
> >
> >
> > _______________________________________________
> > pso mailing list
> > pso at cursuri.cs.pub.ro
> > http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20080403/e2c65a13/attachment.htm 


More information about the pso mailing list