Hur identifiera bortoptimerad kod?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Mr Andersson
Inlägg: 1397
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Hur identifiera bortoptimerad kod?

Inlägg av Mr Andersson »

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.
Användarvisningsbild
ffredrik
Inlägg: 343
Blev medlem: 20 oktober 2009, 17:52:18
Ort: Göinge

Re: Hur identifiera bortoptimerad kod?

Inlägg av ffredrik »

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.
Polyene
Inlägg: 20
Blev medlem: 29 juli 2018, 09:31:40

Re: Hur identifiera bortoptimerad kod?

Inlägg av Polyene »

Men som sagt, adj används i vissa fall utan att ett värde tilldelats.
Nej, rad 39 körs alltid innan rad 46, så adj används aldrig oinitierad.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4694
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Hur identifiera bortoptimerad kod?

Inlägg av Swech »

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
Användarvisningsbild
Jan Almqvist
Inlägg: 1581
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Hur identifiera bortoptimerad kod?

Inlägg av Jan Almqvist »

Jag tycker din kod ser skum ut, är du säker på att den är korrekt?
ToPNoTCH
Inlägg: 4890
Blev medlem: 21 december 2009, 17:59:48

Re: Hur identifiera bortoptimerad kod?

Inlägg av ToPNoTCH »

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.
ToPNoTCH
Inlägg: 4890
Blev medlem: 21 december 2009, 17:59:48

Re: Hur identifiera bortoptimerad kod?

Inlägg av ToPNoTCH »

Polyene skrev:
Men som sagt, adj används i vissa fall utan att ett värde tilldelats.
Nej, rad 39 körs alltid innan rad 46, så adj används aldrig oinitierad.
Den körs väl bara om i > 0
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Hur identifiera bortoptimerad kod?

Inlägg av Micke_s »

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å.
Mr Andersson
Inlägg: 1397
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Hur identifiera bortoptimerad kod?

Inlägg av Mr Andersson »

ToPNoTCH skrev:
Polyene skrev:
Men som sagt, adj används i vissa fall utan att ett värde tilldelats.
Nej, rad 39 körs alltid innan rad 46, så adj används aldrig oinitierad.
Den körs väl bara om i > 0
All användning är innanför samma if
Användarvisningsbild
Jan Almqvist
Inlägg: 1581
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Hur identifiera bortoptimerad kod?

Inlägg av Jan Almqvist »

ToPNoTCH skrev:Det går knappast att bedöma koden.
...
Då blir man ju bara tvungen att prova.
Med "rätt" värde på parameter 'opt' när u2str() anropas skrivs minnet sönder. Kan leda till spännade fel.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur identifiera bortoptimerad kod?

Inlägg av TomasL »

Varför tror du det.
Användarvisningsbild
Jan Almqvist
Inlägg: 1581
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Hur identifiera bortoptimerad kod?

Inlägg av Jan Almqvist »

Jag har provkört funktionen u2str() och sett vad som händer.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur identifiera bortoptimerad kod?

Inlägg av TomasL »

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.
Användarvisningsbild
Jan Almqvist
Inlägg: 1581
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Hur identifiera bortoptimerad kod?

Inlägg av Jan Almqvist »

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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur identifiera bortoptimerad kod?

Inlägg av TomasL »

du får faktiskt förklara hur man skriver sönder ett RAM-minne
Skriv svar