Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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++ Windows安全模式运行简单程序(至少)快3倍?_C++_Windows_Performance - Fatal编程技术网

C++ Windows安全模式运行简单程序(至少)快3倍?

C++ Windows安全模式运行简单程序(至少)快3倍?,c++,windows,performance,C++,Windows,Performance,这些天在做很多基准测试的时候,我偶然发现了一些对我来说非常令人不安/有趣/新鲜的事情。在做了一些越来越深入的研究之后(我简直不敢相信),windows xp(可能还有所有其他版本)运行程序的速度似乎是安全模式下的3倍 以这个小程序为例: #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { long i,j,k; printf ("Starting...

这些天在做很多基准测试的时候,我偶然发现了一些对我来说非常令人不安/有趣/新鲜的事情。在做了一些越来越深入的研究之后(我简直不敢相信),windows xp(可能还有所有其他版本)运行程序的速度似乎是安全模式下的3倍

以这个小程序为例:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{

    long    i,j,k;

    printf ("Starting...\n");

    k = 12;

    for (i = 0; i < 20000; i++)
        for (j = 100000; j > 0; j--)
            k = k * 12;

    printf ("Done... k =%d", k);     // just using k here to prevent the whole block isn't optimized away.

    return 0;
}
#包括
#包括
int main(int argc,字符**argv)
{
长i,j,k;
printf(“开始…\n”);
k=12;
对于(i=0;i<20000;i++)
对于(j=100000;j>0;j--)
k=k*12;
printf(“Done…k=%d”,k);//只是在这里使用k来防止整个块没有被优化掉。
返回0;
}
在我的2.4 Ghz计算机上,在安全模式下执行大约需要2.5秒,而在正常模式下执行大约需要8秒。(ThreadPriority=TIMECRITICAL,ProcessClass=REALTIME)。 即使在这种windows正常模式下在vmware linux会话中编译和启动代码,它的执行速度也会更快(大约5.5秒)

我也做了很多cpu周期的测量,实际上安全模式的结果似乎很多 考虑到处理的指令量,更像是您应该期望的

我错过了什么?有人能猜出这个谜语吗

感谢所有提示和提示, 塔克斯


解决了我很抱歉,伙计们,这个问题与我的蹩脚的alienware m15x有关,出于某种原因,它的cpu功率明显降低了1/3,除非你使用邪恶的工具(ThrottleStop.exe)将其提高到正常速度。非常抱歉浪费了你的时间(

我想这是因为在安全模式下,后台运行的进程要少得多,因此对CPU和内存使用的压力更小。

有几点:

  • 你说你用秒表测量时间,这并不能给你在过程中花费的时间,你需要正确地分析代码
  • 你试过其他的节目吗
  • 给这个测试一次机会,两个XP虚拟机,一个虚拟机在安全模式下启动,另一个在正常模式下启动,大约在同一时间在两个虚拟机上启动程序,并测量每个虚拟机占用的cpu时间(不是时钟时间)

如果使用C++,可以使用QueQualEdExcType和QueryPerformanceCounter精确地计时一段代码,例如:

#include <time.h>
#include <windows.h>

LARGE_INTEGER startTimer, endTimer, frequency;//declare some big numbers to use in timers
double timeTakenInSeconds;

int main()
{
    //start timer: 
    QueryPerformanceFrequency(&frequency);//retrieves the frequency of the high-resolution performance counter(if exsists on this hardware)
    QueryPerformanceCounter(&startTimer);//retrieves the current value of the high-resolution performance counter(in counts)

    //do something that you want to time here eg call a sorting method


    QueryPerformanceCounter(&endTimer);//endtimer
    timeTakenInSeconds = (endTimer.QuadPart-startTimer.QuadPart) / (double)frequency.QuadPart;//Work out time difference
    cout <<"somthing took:  \t" << timeTakenInSeconds << " seconds" <<endl;//print the time takken

    return 0;
}
#包括
#包括
大整数startTimer,endTimer,frequency;//声明一些要在计时器中使用的大数字
双倍计时秒;
int main()
{
//启动计时器:
QueryPerformanceFrequency(&frequency);//检索高分辨率性能计数器的频率(如果此硬件上存在)
QueryPerformanceCounter(&startTimer);//检索高分辨率性能计数器的当前值(以计数为单位)
//在这里做一些你想计时的事情,例如调用排序方法
QueryPerformanceCounter(&endTimer);//endTimer
timetakenseconds=(endTimer.QuadPart startTimer.QuadPart)/(double)frequency.QuadPart;//计算时间差

DEP是否可以在安全模式下运行?我想知道它是否是某种形式的安全/沙盒或类似的东西。不过,有一种有趣的趋势。

您是否在多台计算机上复制了这一点?(我想,当您说您在VMware/Linux中尝试时,您的意思是使用与VMware主机相同的Windows计算机,在其中以来宾身份运行Linux。)

如果您只在一台计算机上看到过这种效果,那么您可能会有一个驱动程序使未在安全模式下加载的东西减速

(或者其他一些软件,但可能是您所说的CPU空闲且代码与操作系统没有太多交互的驱动程序,除非有什么东西延迟了实际的printf输出,这是可能的。)


e、 g.某些驱动程序可能持有低级别锁,从而阻止正确的任务切换,或者某些程序可能正在使用资源,从而延迟printf调用。从CPU使用情况来看,这两种情况都不一定可见。

正如利奥·戴维森所说,这可能是由未在安全模式下加载的驱动程序造成的

1) 它可能是一个硬件驱动程序:两台计算机是否具有相同的硬件配置


2) 甚至是恶意软件(使用rootkit!):这意味着恶意驱动程序将在正常模式下隐藏自己,因此您可以将sytem32\drivers\中的文件列表与其在安全模式和正常模式下的大小/md5进行比较。您可以使用扫描任何文件。

非常确定这是您的计算机的特殊之处

我在一台旧的XP上网本上运行了用MSVC 10在发布模式下编译的代码,对我来说,在正常模式下比在安全模式下快一点,没有仔细测量,但在正常模式下大约需要8秒,在安全模式下需要10秒


还有一点让人惊讶的是,在正常模式下,你的计算机上的时间似乎和旧的单核Atom CPU上的时间一样长。你没有提到它是什么计算机,但我假设它应该比上网本快,所以你可能会遇到问题。

解决了!对不起,伙计们,这个问题与我糟糕的alienware m15x有关由于某些原因,它的cpu功耗明显降低了1/3,除非您使用邪恶的工具(ThrottleStop.exe)将其提升到正常速度。非常抱歉浪费您的时间:(

不,我想这绝对不是重点。Windows不能以稳定的速度消耗23%的处理能力。但是为什么小程序需要更多的时间呢?其实不是小程序——我只是以一个非常小的程序为例,使其易于重构——我疯狂的预感是Windows将处理器置于某种类型的环境中“过度调试”模式,以便能够捕获更多异常或其他情况。您如何测量时间?其中没有测量代码。此外,您确定整个循环没有被优化吗?com