OT arm-gcc hadanka

Miroslav Šinko sinkomiro na gmail.com
Pondělí Prosinec 29 17:42:01 CET 2014


On 29.12.2014 17:20, Jan Waclawek wrote:
> No, je to naozaj tak, a obdivujem Tvoje znalosti, skumal som to pol dna.

"To je jenom takova skusenost, vite?" :-)

> Ale postrada to akukolvek logiku, teda podla mna; a to rovno v dvoch
> veciach:
>
> 1. Toto totiz nie je zarovnanie, ale trailing padding; t.j. to nie je
> doplnenie medzery PRED 32-bitovu premennu za ucelom jej umiestnenia na
> adresu delitelnu 4, ale doplnenie medzery ZA celu strukturu za ziadnym
> logickym ucelom.

No, trailing padding so zarovnanim suvisi tak, ze ak by si definoval 
pole struktur/unionov, tak kazda dalsia polozka pola bude lezat na 
zarovananej adrese. Normu teraz studovat nejdem, ci je to tam takto 
presne uvedene, ale tak to mam v pamati :-)
To sa tyka v Tvojom pripade unionu. Nadradenej strukture si ale 
predpisal packed, teda nechces, aby hned prvy (v Tvojom pripade jediny) 
union lezal na zarovnanej adrese.

> 2. Naviac, tym, ze som predpisal "packed" strukture, hovorim prekladacu, ze
> chcem mat plnu kontrolu nad umiestnenim jednotlivych jeho poloziek,

To sedi. Pre vsetky polozky struktury, ktorej si zadefinoval packed, to 
plati. Polozkami mozu byt aj struktury a uniony, ale vzdy chapane ako 
celok nejako definovany. Nejako = podla vlastnych pravidiel.

> a
> nevidim absolutne ziadny dovod, aby ten predpis neplatil aj pre do neho
> vnorene zalezitosti. Ale neplati, treba mu to explicitne predpisat.

No, kazda struktura/union sa kompiluje zvlast, nezalezi na vnoreni, 
nevnoreni. Nad zmyslom tohoto sa mozme dohadovat, ale zober si ten 
priklad z dokumentacie, co poslal kolega Milan B. Ked je vnorena 
struktura definovana mimo, tak sa musi kompilovat zvlast, so svojimi 
pravidlami zarovnania, t.j. ak neurcis, tak default - nebude packed. Ak 
potom tu strukturu pouzivas kdekolvek v projekte, musi byt pouzita 
rovnako. T.j. aj ked ju vnoris do nejakej packed struktury, nemoze sa 
pre toto pouzitie zmenit z unpacked na packed, to by sa nedali instancie 
struktury tohto typu kdekade v projekte kopirovat medzi sebou. Preco to 
rovnako plati aj pre vnorene struktury, ktore deklarujes priamo pri 
vnoreni, to je uz len spekulacia, ale plati to rovnako a ja to chapem :-)

miro

> Je to podobne pre mna nepochopitelna a perverzna zalezitost ako dva druhy
> pakovania bitfieldov a ze prave ne-gnu je default v gcc v mingw.
>
> wek
>


Další informace o konferenci Hw-list