w***g 发帖数: 5958 | 1 数值上有显著的差异,太ft了,不知道怎么debug。请版上的牛牛们给点建议。 |
l*****d 发帖数: 359 | 2 undefined behavior again? |
w***g 发帖数: 5958 | 3 g++能够对undefined behavior报错吗?程序很大,而且用了boost什么的library,自己
找起来太麻烦了。
【在 l*****d 的大作中提到】 : undefined behavior again?
|
l*****d 发帖数: 359 | 4 -g -O3什么都不加试试?
自己
【在 w***g 的大作中提到】 : g++能够对undefined behavior报错吗?程序很大,而且用了boost什么的library,自己 : 找起来太麻烦了。
|
T*******i 发帖数: 4992 | 5 输出中间结果再比较
【在 w***g 的大作中提到】 : 数值上有显著的差异,太ft了,不知道怎么debug。请版上的牛牛们给点建议。
|
t****t 发帖数: 6806 | 6 用valgrind运行
【在 w***g 的大作中提到】 : 数值上有显著的差异,太ft了,不知道怎么debug。请版上的牛牛们给点建议。
|
m****t 发帖数: 37 | 7 不一定
可能用了什么数没有初始化
【在 w***g 的大作中提到】 : 数值上有显著的差异,太ft了,不知道怎么debug。请版上的牛牛们给点建议。
|
s***e 发帖数: 122 | 8 至少得用上-Wall吧
【在 w***g 的大作中提到】 : 数值上有显著的差异,太ft了,不知道怎么debug。请版上的牛牛们给点建议。
|
w***g 发帖数: 5958 | 9 -Wall -pedantic都没给出有用的信息,太郁闷了。
【在 s***e 的大作中提到】 : 至少得用上-Wall吧
|
s***e 发帖数: 122 | 10 这种一般都只好用printf去查了。我只有一个有一点点类似的例子:调别人写好的程序
,用的是Fortran,在SunOS和Linux上的结果不一样,后来发现是有一个变量没有初始
化,在SunOS上被初始化为0,但是在Linux就没有。我觉得多用些printf,二分法分段
猜测,花些时间应该就能找出来,就是最后会感叹,写程序容易调程序难 :O)
【在 w***g 的大作中提到】 : -Wall -pedantic都没给出有用的信息,太郁闷了。
|
|
|
t****t 发帖数: 6806 | 11 told you, just use valgrind to run it
【在 w***g 的大作中提到】 : -Wall -pedantic都没给出有用的信息,太郁闷了。
|
t****t 发帖数: 6806 | 12 valgrind solves this easily
【在 s***e 的大作中提到】 : 这种一般都只好用printf去查了。我只有一个有一点点类似的例子:调别人写好的程序 : ,用的是Fortran,在SunOS和Linux上的结果不一样,后来发现是有一个变量没有初始 : 化,在SunOS上被初始化为0,但是在Linux就没有。我觉得多用些printf,二分法分段 : 猜测,花些时间应该就能找出来,就是最后会感叹,写程序容易调程序难 :O)
|
p***m 发帖数: 387 | 13 printf? ft!
【在 s***e 的大作中提到】 : 这种一般都只好用printf去查了。我只有一个有一点点类似的例子:调别人写好的程序 : ,用的是Fortran,在SunOS和Linux上的结果不一样,后来发现是有一个变量没有初始 : 化,在SunOS上被初始化为0,但是在Linux就没有。我觉得多用些printf,二分法分段 : 猜测,花些时间应该就能找出来,就是最后会感叹,写程序容易调程序难 :O)
|
s***e 发帖数: 122 | 14 I usually use it to do memory leak check, but it does seem to be good at
more.
【在 t****t 的大作中提到】 : valgrind solves this easily
|
s***e 发帖数: 122 | 15 yes, you never know how good it is.
【在 p***m 的大作中提到】 : printf? ft!
|
w***g 发帖数: 5958 | 16 bug找出来了,确实是因为有个变量没有初始化。
【在 w***g 的大作中提到】 : 数值上有显著的差异,太ft了,不知道怎么debug。请版上的牛牛们给点建议。
|
f*****Q 发帖数: 1912 | 17 那为什么不同优化会有不同结果呢?那个达人讲讲?
【在 w***g 的大作中提到】 : bug找出来了,确实是因为有个变量没有初始化。
|
r*********r 发帖数: 3195 | |
f*****Q 发帖数: 1912 | 19 但是跟初始化有什么关系呢?
【在 r*********r 的大作中提到】 : 优化后某些局部变量可能都不存在了.
|
r*********r 发帖数: 3195 | 20 优化用了什么trick很难讲,除非看它生成的汇编代码.
btw, 变量没有初始化是常见问题, 用 valgrind 可以查出来的. |
|
|
w***g 发帖数: 5958 | 21 未优化变量的初始值和这个变量的内存地址有关。优化参数变了以后这个变量的内存地
址一般也会变,所以初始值就不一样了。
【在 f*****Q 的大作中提到】 : 那为什么不同优化会有不同结果呢?那个达人讲讲?
|
r*********r 发帖数: 3195 | 22 举个不相关的例子. 老版本的 gcc 是不把 .bss 段里的东西清零的, 好像 3.x 以后就
自动清零了.
所以加了一个优化项 -fno-zero-initialized-in-bss. 用和不用这个优化项显然结果
不同.
gcc 刚升级时, 有些kernel code因为这个东西编译不过去. |
u***************r 发帖数: 11227 | 23
【在 w***g 的大作中提到】 : 未优化变量的初始值和这个变量的内存地址有关。优化参数变了以后这个变量的内存地 : 址一般也会变,所以初始值就不一样了。
|
f*****Q 发帖数: 1912 | 24 原来如此。您没赋值就直接用了...
【在 w***g 的大作中提到】 : 未优化变量的初始值和这个变量的内存地址有关。优化参数变了以后这个变量的内存地 : 址一般也会变,所以初始值就不一样了。
|
P*****f 发帖数: 2272 | 25 据我所知,目前的OS kernel在serve page fault时都是把页面初始化为0。这主要是从
安全角度出发。
很想知道有哪些当前的OS不这样做
【在 r*********r 的大作中提到】 : 举个不相关的例子. 老版本的 gcc 是不把 .bss 段里的东西清零的, 好像 3.x 以后就 : 自动清零了. : 所以加了一个优化项 -fno-zero-initialized-in-bss. 用和不用这个优化项显然结果 : 不同. : gcc 刚升级时, 有些kernel code因为这个东西编译不过去.
|
w***g 发帖数: 5958 | 26 C++ POD不自动初始化这一点很不好,一不小心就忘了。
【在 f*****Q 的大作中提到】 : 原来如此。您没赋值就直接用了...
|