struct - alignment

Ing. Miloslav Ponkrác miloslav.ponkrac na atlas.cz
Pondělí Červen 25 11:49:01 CEST 2001


>zdravim vespolek,
>mohl by mi nekdo napsat, jak donutim GCC, aby mi prvky ve strukturach
>ukladalo v pameti hned za sebe a nedelalo mezery? Zatim to mam tak, ze
>kdyz man ve strkture za sebou char[3] a int, tak ze to mezi nimi udela
>mezeru a ten int ulozi az na sudou adresu. Da se to udelat bez te
>mezery?
>
>Kdyz jsem delal v Metaware HighC, bylo na to pragma Align_members(1). Je
>neco takoveho v gcc? Zkousel jsem #pragma align 1, ale zacalo to psat
>nesmyslne chybove hlasky.


Já vím, že jsem trochu off topic, ale pokud chcete psát přenositelné
programy, tak vězte, že každý překladač to má jinak. Trochu mě tím
překladače štvou. Nejlépe je psát programy, kde na tom nezáleží, protože
existují systémy a procesory, kde nelze nikdy docílit toho, abyste měl třeba
char[3] a int za sebou, protože procesor vyhodí, že int nemůže ležet na
liché adrese a jede přes to vlak. Radím Vám jako první, abyste se zamyslel,
zda skutečně potřebujete předepisovat, jak se mají zarovnávat struktury.

Občas to ale potřeba je, a potom buď do make předepiště, že tento modul se
musí přeložit s parametry, které vypínají zarovnávání. A nebo vytvořte
speciální hlavičkový soubor, kde to předepište, a označte ho jako
platformově závislý.

S pozdravem

Miloslav Ponkrác





Další informace o konferenci Linux