Hi, 再向下我也不清楚了. Kito在上封邮件中说得比较详细, 或许可以顺着他提供的思路去挖掘一下. 在 2013年7月30日下午6:24,秦暕 <love.infly@xxxxxxxxx>写道: > Hi, > > 我检查了下,将nanosec和sec相减运算的值分别打印了,手工比对和程序中的计算结果是一致的,没有出现整形溢出的问题。 > 前面的sec相减肯定不会溢出了都不会超过10,后面的nanosec是两个long的正数减法操作,按说也不会。 > > 而且到后来每个循环时间都在1秒级别了,基本人已经可以感觉出来了,后面的时间没有2倍的递增,而是互相接近。 > > 不知道为什么会有负数,可能是我没有用stdint里面的类型定义,移植性不足造成的? > > 或者确实程序有错误我没发现? > > 2013/7/30 Wei WU(吴伟) <wuwei.gucas@xxxxxxxxx>: > > Hi, > > > > > > > > > > 在 2013年7月30日上午11:30,秦暕 <love.infly@xxxxxxxxx>写道: > >> > >> Hi, 吴伟 > >> > >> > >> > >> > 对于你说的测试结果不一致,我又在自己电脑上做了一次。另外在别人的虚拟机上也简单测了下,和我的结果是一样的。以下是我在本机做的1000次的运行,这个貌似牵扯的比较多,从CPU型号到Gcc版本都会影响结果。 > >> > > > > 结果不一致也可能是我的机器太老旧了( T_T ): > > > > $cat /proc/cpuinfo > > processor : 0 > > vendor_id : GenuineIntel > > cpu family : 6 > > model : 15 > > model name : Intel(R) Pentium(R) Dual CPU T2370 @ 1.73GHz > > stepping : 13 > > microcode : 0xa4 > > cpu MHz : 800.000 > > cache size : 1024 KB > > > >> > >> > >> > >> > 另,我还又用下面的相同循环数的代码分别用O0~3运行了几次,结果是K=128之前一直都是递增的,特别的是O1之后,明显的可以看出,初期的几个递增就是2倍递增,比O0的结果更加符合期望结果,数据如下, > >> **为什么K=128后的时间下降了,我也不清楚原因。** > > > > > > 会不会是长整形溢出? 我的(破)机器编译运行你在SO上的程序, 偶尔会输出来负数 :-) > > > >> > >> 1, 60962944, 1 > >> 2, 121961343, 2 > >> 3, 248836377, 4 > >> 4, 478276479, 8 > >> 5, 961089972, 16 > >> 6, 1371127716, 32 > >> 7, 1851929390, 64 > >> 8, 964310614, 128 > >> 9, 994438045, 256 > >> 10, 1030341734, 512 > >> 11, 1124689492, 1024 > > > > > > > > -- > > 吴伟/Wei Wu > > wuwei.gucas@xxxxxxxxx > -- 吴伟/Wei Wu wuwei.gucas@xxxxxxxxx