预先免责声明:这是一项家庭作业;我来这里是因为我的(在线)教学不是非常敏感。那就是说,除了一个问题,我想我已经弄明白了。
赋值是计算以不同方式创建1000个3个100000大小的1000个数据所需的时间:静态,堆栈和堆。我很确定我有正确的代码来创建数组。我遇到的问题是当我将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();
}
答案 0 :(得分:1)
没有范围问题。两件事可以使输出相同。首先,它们是相同的价值。如果他们是,你不相信尝试在所有循环中进行不同的睡眠或使它们运行不同的数字,你会看到它们打印不同。其次,它们可能不同,但因为两个int的除法是int,所以它们打印相同的值。尝试至少一个划分浮动的参数。在使用两个中的任何一个之前,只需尝试打印avgValue而不进行分割。此外,您可能希望在while循环之前和之后放置GetTickCount()。