Bound checking in c/c++
Nikos Kanellopoulos
nkan at panafonet.gr
Thu Jun 17 11:23:05 EEST 2004
Christos Ricudis wrote:
> On Wed, 16 Jun 2004 19:07:59 +0300
> Karaoulis Marios <marios at lemnos.geo.auth.gr> wrote:
>
>
>>Exo auto to programma
>>#include <stdio.h>
>>#include <stdlib.h>
>>int main()
>>{
>>float a[5];
>>int i;
>>a[0]=0; a[1]=1; a[2]=2;
>>a[3]=3; a[4]=4; a[15]=5;
>>for (i=0;i<=4;i++) printf("%f\n",a[i]);
>>printf("%f\n",a[15]);
>>return 0;
>>}
>
>
> Ksereis ti 8a se kanei o costas at lemnos.geo.auth.gr an ypopsiastei oti pas na kaneis kati tetoio se pragmatiko kwdika? Pistepse me, de 8eleis na ma8eis. To exw dei. Den einai wraio 8eama :>.
>
>
>>to kano compile os
>>gcc -fbound-checking foo.c
>>
>>Alla den gurnaei kapio warning
>>otan to trexo gyrnaei apotelesma gia to a[15]
>>Ti ginetai?
>>Den pianei to flag?
>
>
> Den mporei na piasei - den eimai sigouros oti yparxei kati poy mporei na se glytwsei eykola apo tetoia la8h sthn C. H Fortran kai h Java einai strong-typed glwsses, kai mporoun na prosexoun kala tous pointers tous (otan exoun :P) kai to memory allocation / garbage collection tous.
>
> -fbounds-check
> For front-ends that support it, generate additional code
> to check that indices used to access arrays are within
> the declared range. This is currently only supported by
> the Java and Fortran 77 front-ends, where this option
> defaults to true and false respectively.
>
> Skepsou aplws oti ayto poy egrapses einai h APLH periptwsh. Bound overflow mporei na sou prokypsei se poly pio periplegmenes katastaseis. O monos tropos na to kanei o compiler 8a htan na kanei extend kapoio internal pointer housekeeping structure (nai, apo to myalo mou ta bgazw, den exw dei pote moy ton kwdika tou gcc) me bounds information kai na bazei bounds checking code gyrw apo ta allocations kai ta dereferences, kai pali den eimai apolytws sigouros oti 8a kataferne na ta piasei ola.
>
> Twra blepw oti to bp project prospa8ei na kanei akribws ayto. Endiaferon. 8a 8ela na ksera se poies periptwseis psofaei :P
>
>
>
> ------------------------------------------------------------------------
>
>
Επίσης, στην C δεν θέλουμε να γίνεται bounds checking για λόγους
ταχύτητας και χρήσης μνήμης. Δεν έχω πρόχειρο το πρότυπο της γλώσσας,
αλλά νομίζω ότι είναι στις προδιαγραφές της γλώσσας να μην γίνεται
bounds checking. Σε αυτό το στυλ ξεκίνησε η γλώσσα το 1970 και το
συνέχισε και ο Stroustrup στην C++ (για την οποία όμως υπάρχει η STL).
--
Νίκος Κανελλόπουλοσ
www.astraka.net
More information about the Hellug
mailing list