.[ ČeskéHry.cz ].
Warning při zarovnání

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
frca



Založen: 28. 07. 2007
Příspěvky: 1410

PříspěvekZaslal: 14. červenec 2012, 09:42:08    Předmět: Warning při zarovnání Odpovědět s citátem

Jde v g++ nějakou konkrétní strukturu označit, aby se generoval warning v případě, že tam došlo k zarovnání a struktura tím pádem má sizeof > suma sizeof všech členů? Chci to kvůli načítání souborů, protože tam zarovnání dělá hokej.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 535

PříspěvekZaslal: 14. červenec 2012, 10:51:31    Předmět: Re: Warning při zarovnání Odpovědět s citátem

No nevím jak v g++, ale #pragma pack( push, 1 ) před definicí a #pragma pack(pop) by mohla pomoct.
EDIT: a nebylo by lepší tu strukturu navrhnout tak, aby na začátku byly největší (a tím i zarovnané) proměnné?
Navíc třeba na ARMu, který háže výjimky při nezarovnaném čtení, by to mohl být problém.
Poslední řešení je samozřejmě číst to po částech nebo do bufferu a rozkopírovat to.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1410

PříspěvekZaslal: 14. červenec 2012, 11:42:22    Předmět: Odpovědět s citátem

Jenže v souboru konkrétního formátu jsou ty datové položky za sebou přesně dané a mnohdy dost blbě zarovnané. Já ale nechci struktury pakovat. Chci si je ručně nasekat a kompilátor aby to po mně jen zkontroloval a případně varoval.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1036

PříspěvekZaslal: 14. červenec 2012, 13:16:57    Předmět: Odpovědět s citátem

hmm mozno skus pozriet -Wpadded a -Wpacked

citace:
-Wpacked
Warn if a structure is given the packed attribute, but the packed attribute has no effect on the layout or size of the structure. Such
structures may be mis-aligned for little benefit. For instance, in this code, the variable "f.x" in "struct bar" will be misaligned
even though "struct bar" does not itself have the packed attribute:

-Wpadded
Warn if padding is included in a structure, either to align an element of the structure or to align the whole structure. Sometimes
when this happens it is possible to rearrange the fields of the structure to reduce the padding and so make the structure smaller.

_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna