C的本质,和C++不同,C对string没有特殊的处理。C++的string,比较长度是存在object里面的。也是有始点,终点的。而C没有。所以,不能每次loop都对string来计算长度,那样,成本巨大。
应该是
for(int i=0, n=strlen(s)+1; i<n; i++)
{...}
C的本质,和C++不同,C对string没有特殊的处理。C++的string,比较长度是存在object里面的。也是有始点,终点的。而C没有。所以,不能每次loop都对string来计算长度,那样,成本巨大。
应该是
for(int i=0, n=strlen(s)+1; i<n; i++)
{...}
• LOL, you certainly showed Harvard it sucks -tibuko- ♂ (177 bytes) () 08/31/2022 postreply 12:22:31
• compiler會optimized吧 -violinpiano- ♂ (0 bytes) () 08/31/2022 postreply 12:45:24
• 不会,如果在竞赛中 -兄贵- ♂ (240 bytes) () 08/31/2022 postreply 12:52:27
• 现在的compile应该会。s是local变量,而且在loop里没变化。 -ccb168- ♂ (0 bytes) () 08/31/2022 postreply 13:05:00
• 什么编译器? 贴一下您的测试结果,好吗 -兄贵- ♂ (0 bytes) () 08/31/2022 postreply 13:41:26
• try -O2 with gcc -ccb168- ♂ (0 bytes) () 08/31/2022 postreply 15:10:00
• 应该不会优化,这是memory access,完全可能有别的在改memory -avw- ♀ (0 bytes) () 08/31/2022 postreply 13:19:31
• 笑死人了,人家教授后来在问 i 小于strlen(s)有什么值得优化 -kevin2018- ♂ (177 bytes) () 08/31/2022 postreply 13:13:18