環境:win10+vs2019
在Debug模式下,測驗結果為:
呼叫行內函式運行時間為: 2.766秒
呼叫外部函式運行時間為: 2.658秒
直接運行時間為: 0.232秒
在Release模式下,測驗結果為:
呼叫行內函式運行時間為: 0秒
呼叫外部函式運行時間為: 0秒
直接運行時間為: 0秒
應該有某種方法讓行內和直接運行時間都差不多的,請問該如何寫出測驗代碼或者在編譯器上選擇哪些選項?
原測驗代碼:
#include<iostream>
#include<time.h>
using namespace std;
inline int comp1(int a, int b)
{
return (a > b) ? a : b;
}
int comp2(int a, int b)
{
return (a > b) ? a : b;
}
int main()
{
double t1, t2;
t1 = (double)clock();
for (int m = 0; m < 10000; m++)
for (int n = 0; n < 10000; n++)
comp1(m, n);
t2 = (double)clock();
cout << "呼叫行內函式運行時間為:\t" << (t2 - t1) / CLK_TCK << "秒\n";
t1 = (double)clock();
for (int m = 0; m < 10000; m++)
for (int n = 0; n < 10000; n++)
comp2(m, n);
t2 = (double)clock();
cout << "呼叫外部函式運行時間為:\t" << (t2 - t1) / CLK_TCK << "秒\n";
t1 = (double)clock();
for (int m = 0; m < 10000; m++)
for (int n = 0; n < 10000; n++)
(m > n) ? m : n;
t2 = (double)clock();
cout << "直接運行時間為:\t" << (t2 - t1) / CLK_TCK << "秒\n";
return 0;
}
uj5u.com熱心網友回復:
可以關閉編譯器的優化,并將回圈次數調大。專案-屬性-C/C++-優化uj5u.com熱心網友回復:
優化屬性調過了,設定"只適用于 __inline (/Ob1)",沒有用。
回圈次數調大了,多加了個0上去,只是會增加運行時間,其它都一樣
uj5u.com熱心網友回復:
編譯器自動 將簡單的函式優化成了 行內,1樓說的話ok,可以試試uj5u.com熱心網友回復:
優化屬性調過了,設定"只適用于 __inline (/Ob1)",沒有用。
回圈次數調大了,多加了個0上去,只是會增加運行時間,其它都一樣
uj5u.com熱心網友回復:
前半句話你細品,不管你有沒有 申明行內,都會 把它編譯成行內;你把 函式 里面 申明一個 區域變數,在測驗
uj5u.com熱心網友回復:
#include <stdio.h>
#include <time.h>
inline int comp1(int a, int b)
{
return (a > b) ? a : b;
}
int comp2(int a, int b)
{
return (a > b) ? a : b;
}
int main()
{
double t1, t2;
volatile int dummy;
t1 = (double)clock();
for (int m = 0; m < 100000; m++)
for (int n = 0; n < 10000; n++)
dummy = comp1(m, n);
t2 = (double)clock();
printf("呼叫行內函式運行時間為: %.3f 秒\n", (t2 - t1) / CLK_TCK);
t1 = (double)clock();
for (int m = 0; m < 100000; m++)
for (int n = 0; n < 10000; n++)
dummy = comp2(m, n);
t2 = (double)clock();
printf("呼叫外部函式運行時間為: %.3f 秒\n", (t2 - t1) / CLK_TCK);
t1 = (double)clock();
for (int m = 0; m < 100000; m++)
for (int n = 0; n < 10000; n++)
dummy = (m > n) ? m : n;
t2 = (double)clock();
printf("直接運行時間為: %.3f 秒\n", (t2 - t1) / CLK_TCK);
return 0;
}
uj5u.com熱心網友回復:
使用了你代碼
debug運行結果為:
呼叫行內函式運行時間為: 2.879 秒
呼叫外部函式運行時間為: 2.684 秒
直接運行時間為: 0.181 秒
release運行結果為:
呼叫行內函式運行時間為: 6.158 秒
呼叫外部函式運行時間為: 5.884 秒
直接運行時間為: 5.898 秒
ps:
release模式運行太快,我回圈次數比debug增加了100倍,所以時間更長
結果怎么行內比外部的時間還要長呀?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/162065.html
標籤:C++ 語言
