为什么我的C应用程序比Core i7上的C应用程序(使用相同的库)更快
我有一个用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%. 我很好奇硬件执行什么样的魔术才能解决这个问题.我有一些理论,但我想我会得到一个真正的答案:) 编辑:评论中的其他信息 编译器是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上验证,其他版本可能会有所不同). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |