33,311
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <iostream>
using namespace std;
void fun()
{
int i = 0;
int j = 0;
cout<<"addr1 is :"<<hex<<&i<<endl;
cout<<"addr2 is :"<<hex<<&j<<endl;
{
int k = 0;
int l = 0;
cout<<"addr3 is :"<<hex<<&k<<endl;
cout<<"addr4 is :"<<hex<<&l<<endl;
}
}
int main(int argc, char* argv[])
{
fun();
return 0;
}
不管是不是inline,它总有大括号,而在C编译器看来,遇到一个大括号,就有一个建栈的过程,后面还有拆栈的过程,而宏是编译前的纯字符拷贝,没有这一过程。
C和C++的编译器有个特点,见到大括号就建新栈。[code]
[code=C/C++]
inline函数在编译时,由于有大括号,会有一次建栈和拆栈的过程,因此,其运行成本,其实还是相当于一正常次函数调用的百分之几十。仅仅是减少了一个call的CPU压栈行为,C部分的运行期浮动内存栈还是正常建立了的。