Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 循环交换的性能冲突 #包括 双PCFreq=0.0; __int64 countstart=0; void StartCounter() { 大整数李; if(!QueryPerformanceFrequency(&li)) 我想您可能会感到困惑——第2版_C++_Performance_Caching_Loops - Fatal编程技术网

C++ 循环交换的性能冲突 #包括 双PCFreq=0.0; __int64 countstart=0; void StartCounter() { 大整数李; if(!QueryPerformanceFrequency(&li)) 我想您可能会感到困惑——第2版

C++ 循环交换的性能冲突 #包括 双PCFreq=0.0; __int64 countstart=0; void StartCounter() { 大整数李; if(!QueryPerformanceFrequency(&li)) 我想您可能会感到困惑——第2版,c++,performance,caching,loops,C++,Performance,Caching,Loops,循环交换的性能冲突 #包括 双PCFreq=0.0; __int64 countstart=0; void StartCounter() { 大整数李; if(!QueryPerformanceFrequency(&li)) 我想您可能会感到困惑——第2版将按行的主要顺序访问,即顺序/连续寻址,因此它会更快。困惑可能是因为您的数组索引颠倒了,即x[j][I]而不是x[I][j]。@PaulR:谢谢你的快速回复。我真傻。我用x[j][I]代替了x[I][j],这让我很困惑。真的谢谢。 #inclu

循环交换的性能冲突
#包括
双PCFreq=0.0;
__int64 countstart=0;
void StartCounter()
{
大整数李;
if(!QueryPerformanceFrequency(&li))

我想您可能会感到困惑——第2版将按行的主要顺序访问,即顺序/连续寻址,因此它会更快。困惑可能是因为您的数组索引颠倒了,即
x[j][I]
而不是
x[I][j]
。@PaulR:谢谢你的快速回复。我真傻。我用x[j][I]代替了x[I][j],这让我很困惑。真的谢谢。
#include <windows.h>

double PCFreq = 0.0;
__int64 CounterStart = 0;

void StartCounter()
{
    LARGE_INTEGER li;
    if(!QueryPerformanceFrequency(&li))
    cout << "QueryPerformanceFrequency failed!\n";

    PCFreq = double(li.QuadPart)/1000.0;

    QueryPerformanceCounter(&li);
    CounterStart = li.QuadPart;
}
double GetCounter()
{
    LARGE_INTEGER li;
    QueryPerformanceCounter(&li);
    return double(li.QuadPart-CounterStart)/PCFreq;
}

int main()
{
    StartCounter();
int i,j;
    static int x[4000][4000];
#if 1 //Version 1
    for (i = 0; i < 4000; i++) 
    {
        for (j = 0; j < 4000; j++) 
        {
            x[j][i] = i + j; 
        }
    }
#else //Version 2
    for (j = 0; j < 4000; j++) 
    {
        for (i = 0; i < 4000; i++) 
        {
            x[j][i] = i + j; 
        }
    }
#endif    
    cout << GetCounter() <<"\n";
    return 0;
}