1

前もっての免責事項:これは宿題です。私の(オンラインの)教えはひどく反応しないので、私はここに来ます。そうは言っても、1つの問題を除いてすべてを理解していると思います。

割り当ては、静的、スタック、およびヒープのさまざまな方法で、100000サイズの3つのアレイをそれぞれ1000個作成するのにかかる時間を計測することです。配列を作成するための正しいコードがあると確信しています。私が遭遇している問題は、avgTimeを画面に出力するときに、各関数がまったく同じ値を出力することです。したがって、最初の関数に800ミリ秒かかった場合、その時間は次の2つの関数に対して繰り返されます。それはavgTime変数のスコープと関係があると思います。何かご意見は?

#include <iostream>
#include <windows.h>

using namespace std;

void fStaticArray() {
   int i = 0;
   DWORD avgTime;
   while (i<1000){
      DWORD before = GetTickCount();
      static int staticArray [100000];
      i++;
      DWORD after = GetTickCount();
      avgTime = avgTime + (after - before);
   }
   cout << "fStaticArray: " << (avgTime/1000) << "ms  ";
   //avgTime = 0;
}

void fStackArray() {
   int i = 0;
   DWORD avgTime;
   while (i < 1000) {
      DWORD before = GetTickCount();
      int stackArray [100000];
      i++;
      DWORD after = GetTickCount();
      avgTime = avgTime + (after - before);
   }
   cout << "fStackArray: " << (avgTime/1000) << "ms   ";
}

void fHeapArray() {
   int i = 0;
   DWORD avgTime;
   while (i < 1000) {
     DWORD before = GetTickCount();
     int * heapArray = new int[100000];
     i++;
     DWORD after = GetTickCount();
     avgTime = avgTime + (after - before);
   }
   cout << "fHeapArray: " << (avgTime/1000) << "ms   ";
}


int main(void) {
   fStaticArray();
   fStackArray();
   fHeapArray();
}
4

1 に答える 1

1

スコープの問題はありません。2つのことが出力を同じにする可能性があります。まず、それらは同じ値です。それらがそうであり、確信が持てない場合は、すべてのループに異なるスリープを設定するか、異なる数で実行させると、異なる出力が表示されます。第二に、それらは異なる場合がありますが、2つのintの除算はintであるため、同じ値を出力します。除算の引数を少なくとも1つ試してください。2つのうちのいずれかを使用する前に、除算なしでavgValueを出力してみてください。また、whileループの前後にGetTickCount()を配置することもできます。

于 2012-11-10T04:35:11.277 に答える