Hur identifiera bortoptimerad kod?
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Hur identifiera bortoptimerad kod?
Verifiera först att raden verkligen är bortoptimerad och inte flyttad till ett register.
Vet inte vad du har för debugger men gdb-baserade debuggers har ofta extremt svårt att identifiera register-variabler och säger istället att de inte existerar.
Visst att det är flera miljoner rader kod, men kolla listfilen för den här specifika funktionen innan du rapporterar någonting som kanske inte är en gcc-bugg.
Vet inte vad du har för debugger men gdb-baserade debuggers har ofta extremt svårt att identifiera register-variabler och säger istället att de inte existerar.
Visst att det är flera miljoner rader kod, men kolla listfilen för den här specifika funktionen innan du rapporterar någonting som kanske inte är en gcc-bugg.
Re: Hur identifiera bortoptimerad kod?
Men som sagt, adj används i vissa fall utan att ett värde tilldelats. Detta är utan tvivel ett programmeringsfel. Egendomligt att kompilatorn inte påpekar detta. Är alla relevanta varningar enablade?
Gör ett försök med adj=0 initialt.
Gör ett försök med adj=0 initialt.
Re: Hur identifiera bortoptimerad kod?
Nej, rad 39 körs alltid innan rad 46, så adj används aldrig oinitierad.Men som sagt, adj används i vissa fall utan att ett värde tilldelats.
- Swech
- EF Sponsor
- Inlägg: 4695
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Hur identifiera bortoptimerad kod?
off topic
men är inte koden väl sparsamt kommenterad?
Om det är kommersiell kod och man skall "gräva i den" senare
så är det ju bra med en hint om vad den är tänkt att göra
Swech
men är inte koden väl sparsamt kommenterad?
Om det är kommersiell kod och man skall "gräva i den" senare
så är det ju bra med en hint om vad den är tänkt att göra
Swech
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hur identifiera bortoptimerad kod?
Jag tycker din kod ser skum ut, är du säker på att den är korrekt?
Re: Hur identifiera bortoptimerad kod?
Det går knappast att bedöma koden.
I den del vi får se så saknas exempelvis deklarering av:
I2STR_ADDSPACE
i2str_dot
i2str_fill
Säkert konstanter eller globala, men man kan ju bara gissa.
I den del vi får se så saknas exempelvis deklarering av:
I2STR_ADDSPACE
i2str_dot
i2str_fill
Säkert konstanter eller globala, men man kan ju bara gissa.
Re: Hur identifiera bortoptimerad kod?
Den körs väl bara om i > 0Polyene skrev:Nej, rad 39 körs alltid innan rad 46, så adj används aldrig oinitierad.Men som sagt, adj används i vissa fall utan att ett värde tilldelats.
Re: Hur identifiera bortoptimerad kod?
Sprid ut koden på flera rader så varje rad inte gör för mycket. Dela ut funktioner i subfunktioner.
Har stött på en del lustigheter i olika kompilatorer.. ger förvisso ingen brist på jobb..
”Defensive programming” kan vara bra oavsett...
Misra 2012 har några vettiga idéer också.
Har stött på en del lustigheter i olika kompilatorer.. ger förvisso ingen brist på jobb..
”Defensive programming” kan vara bra oavsett...
Misra 2012 har några vettiga idéer också.
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Hur identifiera bortoptimerad kod?
All användning är innanför samma ifToPNoTCH skrev:Den körs väl bara om i > 0Polyene skrev:Nej, rad 39 körs alltid innan rad 46, så adj används aldrig oinitierad.Men som sagt, adj används i vissa fall utan att ett värde tilldelats.
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hur identifiera bortoptimerad kod?
Då blir man ju bara tvungen att prova.ToPNoTCH skrev:Det går knappast att bedöma koden.
...
Med "rätt" värde på parameter 'opt' när u2str() anropas skrivs minnet sönder. Kan leda till spännade fel.
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hur identifiera bortoptimerad kod?
Jag har provkört funktionen u2str() och sett vad som händer.
Re: Hur identifiera bortoptimerad kod?
Nu är det inte det frågan gäller, utan det handlar om optimeringar.
För info så är u2str inte en funktion som kan köras separat, utan det är en underfunktion till huvudfunktionen, vilken kopierar intar till textsträngar, med önskat antal decimaler, typ av decimaltecken samt inledande nollors vara eller inte vara.
Varibeln opt är hitintills varit definad, men vi går mer och mer över till enumar, just för felkontrollen skull.
För info så är u2str inte en funktion som kan köras separat, utan det är en underfunktion till huvudfunktionen, vilken kopierar intar till textsträngar, med önskat antal decimaler, typ av decimaltecken samt inledande nollors vara eller inte vara.
Varibeln opt är hitintills varit definad, men vi går mer och mer över till enumar, just för felkontrollen skull.
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hur identifiera bortoptimerad kod?
Du gör du givetvis som du vill men mitt tips är att ha kontroller av värde för parametrar i alla funktioner.
Detta för att en funktion inte ska göra något helt orimligt om man någon av misstag råkar anropa en funktion med ett knasigt värde.
Att använda enum istället för define är väl bra men det förhindrar inte att u2str() skriver sönder minnet, vid anropet kan du ju skicka vad som helst, parametern är ju en unsigned char.
Detta för att en funktion inte ska göra något helt orimligt om man någon av misstag råkar anropa en funktion med ett knasigt värde.
Att använda enum istället för define är väl bra men det förhindrar inte att u2str() skriver sönder minnet, vid anropet kan du ju skicka vad som helst, parametern är ju en unsigned char.
Re: Hur identifiera bortoptimerad kod?
du får faktiskt förklara hur man skriver sönder ett RAM-minne