John Love-Jensen дµÀ: > Hi, > > In this particular example, the size() method is inline, so the compiler > injects it locally into the code, and hence the compiler is aware if size() > changes some global variable or not. > > If size() were non-inline, it would be a "black box" to the optimizer, so in > that case your analysis is correct. > > --Eljay yes, size() function is inline, but consider this situation: we can call some non-inline functions in inline function,i.e, void foo_non_inline(); inline int foo_inline() { /*...*/ foo_non_inline(); /*...*/ } obviously we are not sure that the global variabls are changed or not in foo_non_inline(); So my questions is: is gcc *smart* enough that she can determine when to do the optimization? > > On 12/21/07 11:41 PM, "Áúº£ÌÎ" wrote: > >> ---------code----------- >> vector a; >> /*do somthing*/ >> for(int i = 0; i> /* do something*/ >> } >> --------code end-------- >> >> my question is: >> is it possible that the compiler will transform the code to this: >> >> int __tmp = a.size(); >> for(int i = 0; i < __tmp; i++) { >> /*do something*/ >> } >> >> i think it is impoossible,because in size() function, the programmer >> can change some global variables, so the compiler could not do that. >> >> if gcc can, could you tell me how? >> >> i am sorry in advance because i am not familiar with the code optimization. >> so i do not know how to search the gcc manual and gcc internal manual to find >> answer.could anyone tell me how to find this in the manual£¿or at least give >> some keywords? >