VS里关于内联函数的能不能强制使用内联?

u010569833 2013-05-05 08:35:22
我尝试了__inline,__forceinline都没有用。
...全文
701 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010569833 2013-05-05
  • 打赏
  • 举报
回复
代码中,这两句把执行时间输出来了 DWORD d = time2 - time1;; cout<<d<<endl;
引用 10 楼 mougaidong 的回复:
引用 5 楼 u010569833 的回复:
我编译的时候,没有出现警告,就是说内联是成功的。 但是执行下面代码,为什么宏比内联快了10倍的时间?不明白啊。 内联 __forceinline int and1(int i) { i++; return i; } 宏定义 #define and1(i) ((i)++)


	DWORD time1  = GetTickCount();
	int x = 0;
	for (int i = 0; i < 1000000000; i++)
	{
		x = and1(i);
	}
	DWORD time2  = GetTickCount();
	DWORD d = time2 - time1;;
	cout<<d<<endl;
	cout<<x<<endl;


[quote=引用 4 楼 FancyMouse 的回复:] [quote=引用 3 楼 u010569833 的回复:] 能不能内联,跟编译器有关吧。我用的是vs2012 c++啊。 [quote=引用 1 楼 FancyMouse 的回复:] __forceinline再不行说明你的代码本身就不能内联
__forceinline本来就msvc特有的,你既然说了这个那大家都知道你用的什么编译器。msvc的__forceinline行为是不能inline会发警告。加了__forceinline不能inline的原因在msdn上都有说。[/quote][/quote] 快10倍是怎么对比出来的? 代码能贴出来看看吗?[/quote]
turing-complete 2013-05-05
  • 打赏
  • 举报
回复
引用 5 楼 u010569833 的回复:
我编译的时候,没有出现警告,就是说内联是成功的。 但是执行下面代码,为什么宏比内联快了10倍的时间?不明白啊。 内联 __forceinline int and1(int i) { i++; return i; } 宏定义 #define and1(i) ((i)++)


	DWORD time1  = GetTickCount();
	int x = 0;
	for (int i = 0; i < 1000000000; i++)
	{
		x = and1(i);
	}
	DWORD time2  = GetTickCount();
	DWORD d = time2 - time1;;
	cout<<d<<endl;
	cout<<x<<endl;


引用 4 楼 FancyMouse 的回复:
[quote=引用 3 楼 u010569833 的回复:] 能不能内联,跟编译器有关吧。我用的是vs2012 c++啊。 [quote=引用 1 楼 FancyMouse 的回复:] __forceinline再不行说明你的代码本身就不能内联
__forceinline本来就msvc特有的,你既然说了这个那大家都知道你用的什么编译器。msvc的__forceinline行为是不能inline会发警告。加了__forceinline不能inline的原因在msdn上都有说。[/quote][/quote] 快10倍是怎么对比出来的? 代码能贴出来看看吗?
小竹z 2013-05-05
  • 打赏
  • 举报
回复
在以下情况中,编译器不进行函数内联,即使是使用__forceinline: 1.函数或其调用者使用/Ob0编译器选项进行编译(Debug模式下的默认选项)。也就是说在Debug模式下,是不会发生函数内联的。 2.函数和其调用者使用不同类型的异常处理。 3.函数具有可变数目的参数。 4.函数使用了在线汇编(即直接在你C/C++代码里加入汇编语言代码)。但使用了编译器关于优化的选项/Og,/Ox,/O1,或/O2的情况除外。 5.是虚函数并且是虚调用。但对虚函数的直接调用可以inline。 6.通过指向该函数的函数指针进行调用。 7.函数被关键字__declspec(naked)修饰。
u010569833 2013-05-05
  • 打赏
  • 举报
回复
优化编译在哪里开启? msvc默认不是优化编译的?
引用 7 楼 bluewanderer 的回复:
__forceinline只有优化编译的时候才有效,不开优化编译器是不会进行任何内联处理的
bluewanderer 2013-05-05
  • 打赏
  • 举报
回复
__forceinline只有优化编译的时候才有效,不开优化编译器是不会进行任何内联处理的
u010569833 2013-05-05
  • 打赏
  • 举报
回复
我编译的时候,没有出现警告,就是说内联是成功的。 但是执行下面代码,为什么宏比内联快了10倍的时间?不明白啊。



内联
__forceinline int and1(int i)
{
	return i + 1;
}


宏定义
#define and1(i) ((i)+1)



执行代码:
DWORD time1  = GetTickCount();
int x = 0;
for (int i = 0; i < 1000000000; i++)
{
    x = and1(i);
}
DWORD time2  = GetTickCount();
DWORD d = time2 - time1;;
cout<<d<<endl;
cout<<x<<endl;



引用 4 楼 FancyMouse 的回复:
引用 3 楼 u010569833 的回复:
能不能内联,跟编译器有关吧。我用的是vs2012 c++啊。 [quote=引用 1 楼 FancyMouse 的回复:] __forceinline再不行说明你的代码本身就不能内联
__forceinline本来就msvc特有的,你既然说了这个那大家都知道你用的什么编译器。msvc的__forceinline行为是不能inline会发警告。加了__forceinline不能inline的原因在msdn上都有说。[/quote]
u010569833 2013-05-05
  • 打赏
  • 举报
回复
我编译的时候,没有出现警告,就是说内联是成功的。 但是执行下面代码,为什么宏比内联快了10倍的时间?不明白啊。 内联 __forceinline int and1(int i) { i++; return i; } 宏定义 #define and1(i) ((i)++)


	DWORD time1  = GetTickCount();
	int x = 0;
	for (int i = 0; i < 1000000000; i++)
	{
		x = and1(i);
	}
	DWORD time2  = GetTickCount();
	DWORD d = time2 - time1;;
	cout<<d<<endl;
	cout<<x<<endl;


引用 4 楼 FancyMouse 的回复:
引用 3 楼 u010569833 的回复:
能不能内联,跟编译器有关吧。我用的是vs2012 c++啊。 [quote=引用 1 楼 FancyMouse 的回复:] __forceinline再不行说明你的代码本身就不能内联
__forceinline本来就msvc特有的,你既然说了这个那大家都知道你用的什么编译器。msvc的__forceinline行为是不能inline会发警告。加了__forceinline不能inline的原因在msdn上都有说。[/quote]
FancyMouse 2013-05-05
  • 打赏
  • 举报
回复
引用 3 楼 u010569833 的回复:
能不能内联,跟编译器有关吧。我用的是vs2012 c++啊。
引用 1 楼 FancyMouse 的回复:
__forceinline再不行说明你的代码本身就不能内联
__forceinline本来就msvc特有的,你既然说了这个那大家都知道你用的什么编译器。msvc的__forceinline行为是不能inline会发警告。加了__forceinline不能inline的原因在msdn上都有说。
u010569833 2013-05-05
  • 打赏
  • 举报
回复
能不能内联,跟编译器有关吧。我用的是vs2012 c++啊。
引用 1 楼 FancyMouse 的回复:
__forceinline再不行说明你的代码本身就不能内联
pathuang68 2013-05-05
  • 打赏
  • 举报
回复
不能强制内联。
FancyMouse 2013-05-05
  • 打赏
  • 举报
回复
__forceinline再不行说明你的代码本身就不能内联
bluewanderer 2013-05-05
  • 打赏
  • 举报
回复
工程配置选Release再看就是了
u010569833 2013-05-05
  • 打赏
  • 举报
回复
谁能帮忙看看??

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧