C++ 应该是局部变量的变量是全局变量
只是一个免责声明:这是一个家庭作业;我来这里是因为我的(在线)老师反应不太好。也就是说,除了一个问题,我想我已经解决了所有问题 分配的是以不同的方式(静态、堆栈上和堆上)创建3个100000大小的数组中的每一个1000所需的时间。我很确定我有创建数组的正确代码。我遇到的问题是,当我将avgTime打印到屏幕上时,每个函数都输出完全相同的值。因此,如果第一个函数需要800毫秒,那么接下来的两个函数将重复该时间。我认为这与avgTime变量的范围有关。有什么想法吗C++ 应该是局部变量的变量是全局变量,c++,variables,scope,C++,Variables,Scope,只是一个免责声明:这是一个家庭作业;我来这里是因为我的(在线)老师反应不太好。也就是说,除了一个问题,我想我已经解决了所有问题 分配的是以不同的方式(静态、堆栈上和堆上)创建3个100000大小的数组中的每一个1000所需的时间。我很确定我有创建数组的正确代码。我遇到的问题是,当我将avgTime打印到屏幕上时,每个函数都输出完全相同的值。因此,如果第一个函数需要800毫秒,那么接下来的两个函数将重复该时间。我认为这与avgTime变量的范围有关。有什么想法吗 #include <iost
#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();
}
#包括
#包括
使用名称空间std;
void fStaticArray(){
int i=0;
德沃德·阿夫蒂姆;
虽然(i没有范围问题。有两件事可以使输出相同。首先,它们是相同的值。如果它们是相同的,并且您不确信,请尝试在所有循环中设置不同的睡眠,或者让它们运行不同的数字,您将看到它们打印的结果不同。第二,它们可能不同,但由于两个int的除法是int,所以它们打印的值相同。尝试使用至少一个除法参数进行浮点运算。在使用这两个参数中的任何一个之前,请尝试不使用除法打印avgValue。此外,您可能需要将GetTickCount()放入在while循环之前和之后。没有范围问题。有两件事可以使输出相同。首先,它们是相同的值。如果它们是相同的值,并且您不确信,请尝试在所有循环中放置不同的睡眠,或者使它们运行不同的数字,您将看到它们打印的不同。第二,它们可能不同,但两个int的除法是不一样的int,所以它们打印的是相同的值。请尝试至少使用一个除法参数进行浮点运算。在使用这两个参数中的任何一个之前,请尝试不使用除法打印avgValue。此外,您可能需要将GetTickCount()放入在while循环之前和之后。在每个函数中将avgTime
初始化为0
时会发生什么?您当前使用的是一个未初始化的值。除此之外,您是否确定它们占用的时间都不相同?时钟在许多系统上通常不是很精细,因此您可能会遇到麻烦这是一个失败的初始化与一个非常小的时间差结合。我刚刚运行你的代码,并得到3个不同的值为时代。提姆是正确的。天气或不是一个值初始化为0在C++是实现,但肯定不能保证。注意你的第三方法是泄漏内存,如果你的代码>w[]
您必须删除[]
@OgrePsalm33:标准不保证初始化,目的是不执行初始化,数组中的值在所有三种情况下都未初始化。要初始化它们,您可以在前两种情况下使用聚合初始化或新int[100000]();
用于动态内存。在每个函数中将avgTime
初始化为0
时会发生什么?您当前使用的是未初始化的值。除此之外,您确定它们不是都占用同一时间吗?时钟在许多系统上通常不是很精细,因此您可能会遇到麻烦。可能性是,它是一个失败的初始化与一个非常小的时间差结合。我刚刚运行了你的代码,并得到了3个不同的值为时代。提姆是正确的。天气或不是一个值被初始化为0在C++中是实现,但肯定不能保证。注意,你的第三方法是泄漏内存,如果你<代码>新的]您必须删除[]
@OgrePsalm33:标准不保证初始化,目的是不执行初始化,数组中的值在所有三种情况下都未初始化。要初始化它们,您可以在前两种情况下使用聚合初始化或新int[100000]()
对于动态内存。Vishal,这就是诀窍。我将getch()放在函数调用之间以降低速度,效果非常好。谢谢!现在您确信没有全局作用域问题,请删除getch()并报告您观察到的情况。现代编译器和计算机速度足够快,创建百万整数似乎并不费时。如果您仍想报告一些差异,请尝试创建更大的对象(定义一个包含大量数据的类,该类是大数组的成员)希望有所不同。它给了我一份报告,让我一开始就觉得有问题。这三个数字都是一样的。我很有兴趣继续这个项目,因为它对我来说非常有趣,但我的下一个项目还在等待…再次感谢你的帮助!Vishal,这就是诀窍。我把getch()在两次函数调用之间,速度会慢一点,效果非常好。谢谢!现在您确信没有全局作用域问题,请删除getch()并报告您观察到的情况。现代编译器和计算机速度足够快,创建百万整数似乎并不费时。如果您仍想报告一些差异,请尝试创建更大的对象(定义一个包含大量数据的类,该类是大数组的成员)希望有所不同。它给了我一份报告,让我一开始就觉得有问题。这三个数字都是一样的。我很有兴趣继续这个项目,因为它对我来说非常有趣,但我的下一个项目正在等待…再次感谢你的帮助!