草庐IT

c++ - C 明显比 C++ 快吗

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭11年前。据我所知,所有脚本语言和核心科学程序通常都是用C编写的;这使得实现变得困惑,但在某种程度上直截了当。我知道这些人希望最大限度地发挥他们的性能,但是使用C字符串和C结构与使用C++类之间是否存在真正的区别?C++似乎以同样的方式工作,除了虚函数之外,它存储一个类函数一次,该类的每个实例都会调用该函数。是什么让C变得更快?在诸如python或sqlite

c++ - C 明显比 C++ 快吗

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭11年前。据我所知,所有脚本语言和核心科学程序通常都是用C编写的;这使得实现变得困惑,但在某种程度上直截了当。我知道这些人希望最大限度地发挥他们的性能,但是使用C字符串和C结构与使用C++类之间是否存在真正的区别?C++似乎以同样的方式工作,除了虚函数之外,它存储一个类函数一次,该类的每个实例都会调用该函数。是什么让C变得更快?在诸如python或sqlite

c++ - 为什么 std::fill(0) 比 std::fill(1) 慢?

我在一个系统上观察到std::fill在大std::vector设置常量值0时明显且始终较慢与常数值1相比或动态值:5.8GiB/s对比7.5GiB/s但是,对于较小的数据大小,结果是不同的,其中fill(0)是比较快的:具有多个线程,数据大小为4GiB,fill(1)显示更高的斜率,但达到比fill(0)低得多的峰值(51GiB/s对比90GiB/s):这就提出了第二个问题,为什么fill(1)的峰值带宽?低得多。对此的测试系统是一个双插槽IntelXeonCPUE5-2680v3,频率设置为2.5GHz(通过/sys/cpufreq)和8x16GiBDDR4-2133。我使用GCC

c++ - 为什么 std::fill(0) 比 std::fill(1) 慢?

我在一个系统上观察到std::fill在大std::vector设置常量值0时明显且始终较慢与常数值1相比或动态值:5.8GiB/s对比7.5GiB/s但是,对于较小的数据大小,结果是不同的,其中fill(0)是比较快的:具有多个线程,数据大小为4GiB,fill(1)显示更高的斜率,但达到比fill(0)低得多的峰值(51GiB/s对比90GiB/s):这就提出了第二个问题,为什么fill(1)的峰值带宽?低得多。对此的测试系统是一个双插槽IntelXeonCPUE5-2680v3,频率设置为2.5GHz(通过/sys/cpufreq)和8x16GiBDDR4-2133。我使用GCC

c++ - x += a 比 x = x + a 快吗?

我正在阅读Stroustrup的“C++编程语言”,他说向变量添加内容的两种方法中x=x+a;和x+=a;他更喜欢+=,因为它很可能实现得更好。我认为他的意思是它也工作得更快。但真的吗?如果它取决于编译器和其他东西,我该如何检查? 最佳答案 任何称职的编译器都会为任何内置类型(int、float等)的两种构造生成完全相同的机器语言序列,只要该语句实际上就像x=x+a;并且启用了优化一样简单。(值得注意的是,GCC的-O0是默认模式,它执行反优化,例如将完全不必要的存储插入到内存中,以确保调试器总能找到变量值。)但是,如果语句更复杂,

c++ - x += a 比 x = x + a 快吗?

我正在阅读Stroustrup的“C++编程语言”,他说向变量添加内容的两种方法中x=x+a;和x+=a;他更喜欢+=,因为它很可能实现得更好。我认为他的意思是它也工作得更快。但真的吗?如果它取决于编译器和其他东西,我该如何检查? 最佳答案 任何称职的编译器都会为任何内置类型(int、float等)的两种构造生成完全相同的机器语言序列,只要该语句实际上就像x=x+a;并且启用了优化一样简单。(值得注意的是,GCC的-O0是默认模式,它执行反优化,例如将完全不必要的存储插入到内存中,以确保调试器总能找到变量值。)但是,如果语句更复杂,

c++ - 为什么 memmove 比 memcpy 快?

我正在调查一个应用程序中的性能热点,该应用程序花费了50%它在memmove(3)中的时间。应用程序插入数百万个4字节整数进入排序数组,并使用memmove将数据“向右”移动以便为插入的值腾出空间。我的期望是复制内存非常快,我很惊讶这么多时间都花在了memmove上。但后来我想到了memmove很慢,因为它正在移动重叠区域,必须实现在一个紧密的循环中,而不是复制大内存页。我写了一个小微基准测试,以确定两者之间是否存在性能差异memcpy和memmove,期待memcpy胜出。我在两台机器(核心i5、核心i7)上运行了我的基准测试,发现memmove是实际上比memcpy快,在较旧的核心

c++ - 为什么 memmove 比 memcpy 快?

我正在调查一个应用程序中的性能热点,该应用程序花费了50%它在memmove(3)中的时间。应用程序插入数百万个4字节整数进入排序数组,并使用memmove将数据“向右”移动以便为插入的值腾出空间。我的期望是复制内存非常快,我很惊讶这么多时间都花在了memmove上。但后来我想到了memmove很慢,因为它正在移动重叠区域,必须实现在一个紧密的循环中,而不是复制大内存页。我写了一个小微基准测试,以确定两者之间是否存在性能差异memcpy和memmove,期待memcpy胜出。我在两台机器(核心i5、核心i7)上运行了我的基准测试,发现memmove是实际上比memcpy快,在较旧的核心

Java 使用数组比 C++ 中的 std::vector 快 8 倍。我做错了什么?

我有以下Java代码,其中包含几个永远不会改变大小的大数组。它在我的电脑上运行时间为1100毫秒。我在C++中实现了相同的代码并使用了std::vector。在我的计算机上运行完全相同的代码的C++实现的时间是8800毫秒。我做错了什么,导致它运行得这么慢?代码基本上做了以下事情:for(inti=0;i它遍历大小约为20000的不同数组。您可以在以下链接下找到这两种实现:Java:https://ideone.com/R8KqjTC++:https://ideone.com/Lu7RpE(在ideone上,由于时间限制,我只能运行循环400次而不是2000次。但即使在这里也有3次的差

Java 使用数组比 C++ 中的 std::vector 快 8 倍。我做错了什么?

我有以下Java代码,其中包含几个永远不会改变大小的大数组。它在我的电脑上运行时间为1100毫秒。我在C++中实现了相同的代码并使用了std::vector。在我的计算机上运行完全相同的代码的C++实现的时间是8800毫秒。我做错了什么,导致它运行得这么慢?代码基本上做了以下事情:for(inti=0;i它遍历大小约为20000的不同数组。您可以在以下链接下找到这两种实现:Java:https://ideone.com/R8KqjTC++:https://ideone.com/Lu7RpE(在ideone上,由于时间限制,我只能运行循环400次而不是2000次。但即使在这里也有3次的差