可以讨论一个编程问题吗?这样写C++代码效率为何这么低?
-
你需要什么样的操作呢?自带的各种类都无法满足吗?
-
谢谢您的回答!试了一下确实是编译器优化带来的问题,我在linux系统下使用g++编译这串代码,以下分别是优化等级-O0(无优化)、-O1、-O2、-O3时得到的运行速度:
-O0 Time1 = 47.759S Time2 = 29.2934S -O1 Time1 = 16.7366S Time2 = 4.35349S -O2 Time1 = 11.9593S Time2 = 1e-06S -O3: Time1 = 12.2002S Time2 = 0S
可见无优化时虽然我这种使用类的写法也要慢一些,但两者在一个数量级上,优化等级越高,直接使用数组的方法优势就越大了……
编译器的优化好神奇哦!
看来以后还是尽量去用别人写的成熟的函数库吧…… -
你的new/delete是罪魁祸首,loop 1000000次意味着你new/delete了1000000次array C,尽量不要动态分配内存,除非你有不得不这样写的原因。如果你知道你要在代码里反复使用A, B, C三个矩阵,你应该一开始就分配好而不是在结构体里new。matlab里你可以随便写C = A + B 是因为matlab已经替你做了内存管理,你自己写代码的时候就要做到方方面面兼顾了。
2019年2月28日 02:33
13/19
2019年3月14日 10:10