如果我用 codeBlocks 编译它,为啥我的代码运行得更快
Posted
技术标签:
【中文标题】如果我用 codeBlocks 编译它,为啥我的代码运行得更快【英文标题】:Why is my code running faster if i compiled it with codeBlocks如果我用 codeBlocks 编译它,为什么我的代码运行得更快 【发布时间】:2016-12-02 22:58:30 【问题描述】:我想测量相机的 fps。我找到了一个简单的代码here。 如果我用 codeBlocks(在 Ununtu 上)编译代码并运行循环 600 次,结果是 27 fps。
如果我从终端编译它:
g++ -Wall main.cpp -o main -I/usr/local/include/ -lopencv_core -lopencv_highgui
结果为 14 fps。为什么终端编译后这么慢?
这里是代码
#include "opencv2/opencv.hpp"
#include <time.h>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
// Start default camera
VideoCapture video(0);
// With webcam get(CV_CAP_PROP_FPS) does not work.
// Let's see for ourselves.
double fps;
// Number of frames to capture
int num_frames = 600;
// Start and end times
time_t start, end;
// Variable for storing video frames
Mat frame;
cout << "Capturing " << num_frames << " frames" << endl ;
// Start time
time(&start);
// Grab a few frames
for(int i = 0; i < num_frames; i++)
video >> frame;
// End Time
time(&end);
// Time elapsed
double seconds = difftime (end, start);
cout << "Time taken : " << seconds << " seconds" << endl;
// Calculate frames per second
fps = num_frames / seconds;
cout << "Estimated frames per second : " << fps << endl;
// Release video
video.release();
return 0;
【问题讨论】:
CodeBlocks 使用什么编译器以及带有什么优化标志?也永远不要在调试模式下测量任何东西。将 -O2 添加到命令行并重试。 我在命令行中添加了 -O2 但没有任何改变。在 codeBlocks 中选择了 GNU GCC 编译器,并且只选择了标志 -g(生成调试符号)。设置是默认的,我没有改变任何东西。 要比较编译器的速度,您必须与生成最快二进制文件的选项进行比较。您需要在两个编译器中找到使代码运行最快的选项,然后只比较那些最快的运行。 【参考方案1】:您只需要像 Code::Blocks 的编译方式一样在命令行上进行编译。要查看它是什么,请转到编译器和调试设置并启用构建日志记录选项之一。更多细节在这里:Code::blocks verbose build
【讨论】:
我也尝试过。 g++ -Wall -fexceptions -O2 -I/usr/local/include/opencv2 -I/usr/local/include/opencv -c main.cpp -o main.o g++ -L/usr/local/bin -o main main .o -s -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab 但是有一些奇怪的行为。如果我从终端启动程序并最小化终端程序打印 27 fps。如果我留在终端上,它是 14 fps。我在计数过程中没有输出任何东西......【参考方案2】:我想我解决了这个问题。 当光线很亮时,fps 很高。如果它很暗,则 fps 很低。所以也许与亮度有关......
【讨论】:
以上是关于如果我用 codeBlocks 编译它,为啥我的代码运行得更快的主要内容,如果未能解决你的问题,请参考以下文章
codeblocks怎样导入已有项目?为啥每次打开都是main.c文件?
为啥 glut.h 会在 CodeBlocks 中弹出一堆未定义的引用?