【发布时间】:2011-01-04 11:57:21
【问题描述】:
我有一个用 C 编写的库,我有 2 个用 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" );
}
在 Intel Core i7 上,C++ 代码每秒产生的消息几乎正好多出 50%。 而在 Intel Core 2 Duo 上,它每秒产生几乎完全相同数量的消息。 (核心 i7 有 4 个核心,每个核心有 2 个处理线程)
我很好奇硬件执行了什么样的魔法来实现这一目标。我有一些理论,但我想我会得到一个真正的答案:)
编辑:来自 cmets 的其他信息
编译器是visual C++,所以这是一个windows box(两者都是)
通信库的实现创建了一个新线程来发送消息。 source_create 是创建此线程的原因。
【问题讨论】:
-
编译器?编译器设置?运行?比较发出的目标代码?
-
你也在编译C库吗?或者它已经为你编译了? source_send() 是内联定义的吗?
-
我很难把它放在编译器上。我正在使用 Visual Studio,因此它应该生成适用于所有 Windows 机器的代码,无论内核如何。现在,如果我使用 gcc -mtune=native 进行编译,我们可能会有一些东西,但事实并非如此
-
@Emile:函数不是内联的,我也编译库。
标签: c++ c hardware cpu cpu-architecture