Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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
简单算术运算VBA与C++之间运行时差异的主要原因是什么? 这个C++程序需要20到25秒才能在我的相对缓慢的计算机上运行: #include <iostream> int main() { int i; double test = 456; for (i = 0; i < 900000000; i++) { test = (test / 0.99999999); } std::cout << "The value of test is " << test <<".\n"; return 0; } Sub Macro1() Dim i As Long Dim test As Double test = 456 For i = 0 To 900000000 test = (test / 0.99999999) Next i Cells(1, 1).Value = test End Sub 这是C++和非汇编语言的典型区别吗?造成时间差异的主要因素是什么?C++是编译最重要的因素吗?谢谢_C++_Performance_Vba - Fatal编程技术网

简单算术运算VBA与C++之间运行时差异的主要原因是什么? 这个C++程序需要20到25秒才能在我的相对缓慢的计算机上运行: #include <iostream> int main() { int i; double test = 456; for (i = 0; i < 900000000; i++) { test = (test / 0.99999999); } std::cout << "The value of test is " << test <<".\n"; return 0; } Sub Macro1() Dim i As Long Dim test As Double test = 456 For i = 0 To 900000000 test = (test / 0.99999999) Next i Cells(1, 1).Value = test End Sub 这是C++和非汇编语言的典型区别吗?造成时间差异的主要因素是什么?C++是编译最重要的因素吗?谢谢

简单算术运算VBA与C++之间运行时差异的主要原因是什么? 这个C++程序需要20到25秒才能在我的相对缓慢的计算机上运行: #include <iostream> int main() { int i; double test = 456; for (i = 0; i < 900000000; i++) { test = (test / 0.99999999); } std::cout << "The value of test is " << test <<".\n"; return 0; } Sub Macro1() Dim i As Long Dim test As Double test = 456 For i = 0 To 900000000 test = (test / 0.99999999) Next i Cells(1, 1).Value = test End Sub 这是C++和非汇编语言的典型区别吗?造成时间差异的主要因素是什么?C++是编译最重要的因素吗?谢谢,c++,performance,vba,C++,Performance,Vba,信息: < C++ > i使用代码::用GCC 块 对于VBA,我使用Excel 2010 对于Code::Blocks,它在控制台中有一个内置计时器 对于Excel,我使用了一个iPhone秒表,不喜欢使用CHIGRESTIMER < /P> < P>,这是常见的,最大的区别是C++编译。我感到惊讶的是,这种差异并没有大几个数量级。大多数性能基准测试显示C/C++比脚本语言快10倍以上。你是如何编译C++代码的?我打赌,如果以最高级别的优化编译,它将在5-10秒内运行。如果还没有,则应该使用-

信息:

< C++ > i使用代码::用GCC

块 对于VBA,我使用Excel 2010

对于Code::Blocks,它在控制台中有一个内置计时器


对于Excel,我使用了一个iPhone秒表,不喜欢使用CHIGRESTIMER < /P> < P>,这是常见的,最大的区别是C++编译。我感到惊讶的是,这种差异并没有大几个数量级。大多数性能基准测试显示C/C++比脚本语言快10倍以上。你是如何编译C++代码的?我打赌,如果以最高级别的优化编译,它将在5-10秒内运行。如果还没有,则应该使用-O3标志编译并计时


<>我对VBA了解不多,但是如果你编译C++的时候有完全的优化,我认为VBA可能通过一个即时编译器运行,然后在VCR上执行与VB.NET相同的操作。你所展示的性能比VC++和VC++任何脚本语言都要多。

< P>差异是常见的,最大的区别是C++编译。我感到惊讶的是,这种差异并没有大几个数量级。大多数性能基准测试显示C/C++比脚本语言快10倍以上。你是如何编译C++代码的?我打赌,如果以最高级别的优化编译,它将在5-10秒内运行。如果还没有,则应该使用-O3标志编译并计时


<>我对VBA了解不多,但是如果你编译C++的时候有完全的优化,我认为VBA可能通过一个即时编译器运行,然后在VCR上执行与VB.NET相同的操作。您展示的性能更像是VC++与VB.NET的对比,而不是VC++与任何脚本语言的对比。

我不相信VBA中的代码行会被一个接一个地解释,必须有一些缓存,否则该系数将远远大于1:2


可能有很多不同之处。当然,不同语言之间从高级语言到CPU指令的转换是不同的。C++编译器对性能进行了优化,以满足广泛的应用,这在办公产品中可能不是很重要。

< P>我不相信VBA中的代码行一次一个地解释,必须有一些缓存,否则这个因素将大大大于1:2。
可能有很多不同之处。当然,不同语言之间从高级语言到CPU指令的转换是不同的。C++编译器对性能进行优化,以满足广泛的应用,这在办公产品中可能不是很重要。

< p>您的基准关闭了,保证金应该更大。

例如,在我的计算机上,C++代码在没有优化的情况下编译为7.46s,使用UNIX时间工具计时;相比之下,VBA代码耗时46秒。这是一个更现实的差距,但我不会对更大的差距感到惊讶——传统的、非优化的口译员通常至少慢十倍

首先,VBA必须读入代码,逐行解释代码,或者将代码转换为中间表示形式。然而,这个中间代码表示仍然被解释,不是由CPU直接运行,还是在C++ 1?< /p>中计算编译时间。 此外,VBA在这段代码中做了许多C++中没有的冗余工作:例如,在for循环变量递增过程中,代码中隐含的每个整数加法都会防止溢出。本质上,这是一个VB代码

i = i + 1
转换为以下伪中间代码:

if i + 1 overflows then
    raise an overflow error
end if
i = i + 1
…对于每个整数运算。这消耗了相当多的运行时间。同样的情况也适用于数组或此处:单元访问操作


1我认为VBA使用了一种称为p代码的中间表示法,而不是逐行代码解释。

您的基准已经偏离,边距应该更大

例如,在我的计算机上,C++代码在没有优化的情况下编译为7.46s,使用UNIX时间工具计时;相比之下,VBA代码耗时46秒。这是一个更现实的差距,但我不会对更大的差距感到惊讶——传统的、非优化的口译员通常至少慢十倍

首先,VBA必须读入代码,逐行解释代码,或者将代码转换为中间表示形式。尽管如此,这个中间代码表示仍然是解释的,而不是由CPU直接运行,或者您是否计算了 C++中的编译时间1? 此外,VBA在这段代码中做了许多C++中没有的冗余工作:例如,在for循环变量递增过程中,代码中隐含的每个整数加法都会防止溢出。本质上,这是一个VB代码

i = i + 1
转换为以下伪中间代码:

if i + 1 overflows then
    raise an overflow error
end if
i = i + 1
…对于每个整数运算。这消耗了相当多的运行时间。同样的情况也适用于数组或此处:单元访问操作


1,我认为VBA使用一种称为P代码的中间表示而不是逐行代码解释。

< P>我想把它放到外行的术语中想象一下VB是如何构建的,在它下面是用C++开发的东西。所以,不管你如何分割它,在大多数情况下,都有一个隐藏的C++中间人,所以在某些情况下,某些事情正在做两次,比如错误保护、交织等。
我还发现VBA作为标准项目或与AutoCAD VBA内置在进程内DLL中的相同功能存在差异,但没有计算性能差异的时间,但我可以看到进程内运行得更快,因为VBA中的运行速度也比从外部VB连接到AutoCAD中快。在VBA中,似乎分配了可用的内存,而VB则使用它自己的进程,我不知道,但它是一个寻找速度提升的地方。

< P>我想把它放到外行的术语中想象一下VB是如何构建的,它下面是用C++开发的。所以,不管你如何分割它,在大多数情况下,都有一个隐藏的C++中间人,所以在某些情况下,某些事情正在做两次,比如错误保护、交织等。

我还发现VBA作为标准项目或与AutoCAD VBA内置在进程内DLL中的相同功能存在差异,但没有计算性能差异的时间,但我可以看到进程内运行得更快,因为VBA中的运行速度也比从外部VB连接到AutoCAD中快。似乎在VBA中为您分配可用内存,VB使用自己的进程,我不知道,但这是一个可以提高速度的地方。

您如何安排操作时间?你是在单独地对操作进行计时,还是在整个过程中运行这个过程?很明显,这是因为循环的VBA运行900000001次迭代,而C++的循环只运行900000000次。@无效,我在计时整个程序运行时间。另请参阅信息下添加的信息:计时器本身可能是问题的一部分。我怀疑Code::Blocks控制台计时器正在减慢运行时间。我相对较慢的计算机..是时候换台新计算机了!!;:你是如何安排手术时间的?你是在单独地对操作进行计时,还是在整个过程中运行这个过程?很明显,这是因为循环的VBA运行900000001次迭代,而C++的循环只运行900000000次。@无效,我在计时整个程序运行时间。另请参阅信息下添加的信息:计时器本身可能是问题的一部分。我怀疑Code::Blocks控制台计时器正在减慢运行时间。我相对较慢的计算机..是时候换台新计算机了!!;:我也觉得利润应该更高。我很想知道其他人会有什么样的利润空间。用发布构建目标而不是调试来编译它使我的利润空间降低到15秒左右。我也觉得利润空间应该更高。我很想知道其他人会有什么样的利润空间。用发行版构建目标而不是调试来编译它,对我来说,时间缩短到15秒左右。如果他使用的是现代编译器&启用优化,我打赌循环会下降到微秒,因为编译器会检测到它可以预计算最终结果&完全优化循环。有趣的假设在最后一段。上次我参与VBA时,CLR没有端口,但那是大约7年前的事了,从那以后可能发生了很多事情。@KonradRudolph是的,我希望能找到更多关于它的信息。。。一定有什么事情发生了,我个人不能相信脚本语言是用C++运行的1:2。这些数字看起来更像是从Jython、IrPython或JuRube中得到的。“EvnMcDayNal.”我个人不能相信脚本语言是用C++运行的1:2——这不是,请看我的答案。我也不相信1:6,哈哈。至少需要1:20才能克服我的怀疑。如果他使用的是现代编译器并启用优化,我打赌循环会下降到微秒,因为编译器会检测到它可以预计算最终结果并完全优化循环。有趣的假设在最后一段。上次我参与VBA时,CLR没有端口,但那是大约7年前的事了,从那以后可能发生了很多事情。@KonradRudolph是的,我希望能找到更多信息
n在上面。。。一定有什么事情发生了,我个人不能相信脚本语言是用C++运行的1:2。这些数字看起来更像是从Jython、IrPython或JuRube中得到的。“EvnMcDayNal.”我个人不能相信脚本语言是用C++运行的1:2——这不是,请看我的答案。我也不能相信1:6,哈哈。至少需要1:20才能克服我的怀疑。