为什么我的C应用程序比Core i7上的C应用程序(使用相同的库)更快

为什么我的C应用程序比Core i7上的C应用程序(使用相同的库)更快,第1张

概述我有一个用C语言编写的库,我有两个用C和C编写的应用程序.这个库是一个通信库,所以其中一个API调用如下所示: int source_send( source_t* source, const char* data ); 在C应用程序中,代码执行以下 *** 作: source_t* source = source_create();for( int i = 0; i < count; ++i ) 我有一个用C语言编写的库,我有两个用C和C编写的应用程序.这个库是一个通信库,所以其中一个API调用如下所示:
int source_send( source_t* source,const char* data );

在C应用程序中,代码执行以下 *** 作:

source_t* source = source_create();for( int i = 0; i < count; ++i )    source_send( source,"test" );

C应用程序执行此 *** 作的位置:

struct Source{    Source()    {        _source = source_create();    }    bool send( const std::string& data )    {        source_send( _source,data.c_str() );    }    source_t* _source;};int main(){    Source* source = new Source();    for( int i = 0; i < count; ++i )        source->send( "test" );}

在英特尔酷睿i7上,C代码每秒产生的消息几乎增加了50%.
而在英特尔酷睿2双核处理器上,它每秒产生的消息数量几乎完全相同. (核心i7有4个核心,每个核心有2个处理线程)

我很好奇硬件执行什么样的魔术才能解决这个问题.我有一些理论,但我想我会得到一个真正的答案:)

编辑:评论中的其他信息

编译器是visual C,所以这是一个windows Box(两者都是)

通信库的实现创建了一个新线程来发送消息. source_create是创建此线程的原因.

解决方法 从单独检查源代码开始,我看不出为什么C代码应该更快的原因.

我要做的下一件事是检查正在生成的汇编代码.如果您使用的是GNU工具链,那么您有几种方法可以做到这一点.

您可以通过-S命令行参数请求gcc和g输出汇编代码.确保添加该参数的其他参数,您使用与常规编译完全相同的命令行参数.

第二个选项是使用gdb加载程序并使用disas命令.

祝好运.

更新

您可以使用Microsoft工具链执行相同的 *** 作.

要使编译器输出汇编,可以使用/FA or /FAs.第一个应该只输出汇编,而第二个汇总汇编和源码(这应该更容易理解).

至于使用调试器,一旦在Visual Studio中启动调试器,导航到“DeBUG | windows | disassembly”(在Visual Studio 2005上验证,其他版本可能会有所不同).

总结

以上是内存溢出为你收集整理的为什么我的C应用程序比Core i7上的C应用程序(使用相同的库)更快全部内容,希望文章能够帮你解决为什么我的C应用程序比Core i7上的C应用程序(使用相同的库)更快所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1255610.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存