Zarovnani v LPC11U68

Miroslav Mraz mrazik na volny.cz
Pondělí Červenec 11 16:26:59 CEST 2016


To máte pravdu, ale nijak to neodporuje mému tvrzení. Pokud požadavek na 
zarovnání pro překladač vznesete, ten jej může akceptovat a 
optimalizovat podle něj, nebo jej ignoruje a optimalizaci neprovede.
Pokud takový požadavek nedáte, překladač nemůže činit žádný předpoklad o 
zarovnání a optimalizovat tedy nemůže.
Narazil jsem na to při implementaci FFT v celých číslech pro cortex-m0, 
pro určitou verzi gcc se neprovedlo zarovnání dat a celé to dlouho 
trvalo, protože se kopírovaly jednotlivé byty. Teď jsem to pro jistotu 
znovu zkoušel a v současné verzi gcc 4.9.3 je toto chování opraveno, 
zarovnání se provede automaticky i bez explicitního 
__attribute__((aligned(4))). Je vidět, že lidi mrmlají a ku podivu gcc 
na to reaguje. Takže máte úplnou pravdu - je ještě 3. možnost - 
požadavek nevznesete a překladač si to udělá po svém (a správně), včetně 
optimalizace. Asi to chce používat co nejnovější software. I když i to 
bývá riziko, je to zkrátka už moc složité.

Mrazík

Dne 11.7.2016 v 12:42 Tomáš Hamouz napsal(a):
> Až dosud jsem byl přesvědčen že __attribute((aligned(n)))) je
> _požadavek_ na compiler/linker, aby danou proměnnou umístil dle
> požadavku, nikoliv informace jak je proměnná zarovnaná.
>
> Tedy říkáte jak "má být", nikoliv jak "je".
>
> Tomáš
>
>
>>


Další informace o konferenci Hw-list