[pso] [tema1] syscall_arg[0]

Maximilian Machedon maximilian.machedon at gmail.com
Thu Apr 3 18:10:58 EEST 2008


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/be94b70a/attachment.html 


More information about the pso mailing list