[elektro] C -- illegal pointer hiba
Móczik Gábor
pm_levlista at progzmaster.hu
Fri Sep 27 10:08:35 CEST 2013
2013.09.27. 9:36 keltezéssel, elight at gmail.hu írta:
> Még volt egy kis elértelmezésem
> a 4 bytos szavak határra illesztésén.
> ( string kiegészítés kellő számú 0-val,
> hogy a karakterek séáma a lezáró
> nullával együtt oszható legyen néggyel. )
>
> Mert a
>
> next_cmd_wr_address = ( next_cmd_wr_address + ( ( ( count + 3 ) >> 2 )
> <<2 ) ) & 0x0FFF;
>
> és a
>
> next_cmd_wr_address = ( next_cmd_wr_address + ( count + 3 ) ) & 0x0FFF;
>
> valahogy lehet, talán nem egészen ugyanazt az eredményt adja.
Hát nem, az utóbbinál az alsó két biten bármi lehet, az előbbinél csak
nulla. Tehát igazításra az utóbbi szerintem nem lehet jó, hacsak nem
rosszul másoltad ide, és a kódban végülis más van.
Az előbbinek kellene jónak lennie, de a shift operátorral szokott lenni
szívás, többek között a sign extension, typecast és egyéb vicces dolgok
miatt.
Szerintem írj simán *4, és /4 utasításokat. Egy valamire való fordító
ismeri ezeket és automatikusan bitszintű shift utasítást fog fordítani,
de akkor olyat, amivel matematikailag stimmel majd az eredmény.
Elvileg az előbbi a jó, mert a második utasítás nem igazít 32 bitre...
Arra jöttem rá, hogy ma már elég fejlettek a fordítók, ha nem
komplikált, egyértelmű, szokványos kódot írsz, akkor a fordító felismeri
ezeket a programozási mintákat, és optimális megoldást fordít hozzá. Ha
nagyon nekiáll az ember bitfaragni, akkor nem ismeri fel mit akarsz,
lefordítja a bitfaragást úgy ahogy odaírtad, ami vagy jó vagy nem, vagy
optimális vagy nem, attól függően, hogy elég jól ismered-e a C, az adott
fordító és az célarchitektúra működésést.
Szóval írj egyszerű megoldásokat, utána nézd meg az asm listet, ha nem
találta ki, akkor kezdd el csak kézzel faragni.
More information about the Elektro
mailing list