1

只是一个免责声明:这是一个家庭作业;我来这里是因为我的(在线)教学反应不是很好。就是说,我想除了一个问题外,我已经弄清楚了。

任务是计算以不同方式创建 10000 个大小为 100000 的 3 个数组中的每一个需要多长时间:静态、堆栈和堆。我很确定我有正确的代码来创建数组。我遇到的问题是当我将 avgTime 打印到屏幕上时,每个函数输出完全相同的值。因此,如果第一个函数花费了 800 毫秒,那么接下来的两个函数将重复该时间。我认为这与 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

不存在范围问题。有两件事可以使输出相同。首先,它们是相同的值。如果它们是并且你不相信尝试在所有循环中放置不同的睡眠或让它们运行不同的数字,你会看到它们打印不同。其次,它们可能不同,但由于两个 int 的除法是 int ,所以它们打印相同的值。尝试至少一个除法参数浮动。在使用两个中的任何一个之前,只需尝试打印 avgValue 而不进行除法。此外,您可能希望在 while 循环之前和之后放置 GetTickCount()。

于 2012-11-10T04:35:11.277 回答