__declspec(noinline) int test1(int a,int b,int c) { volatile int 返回结果= 0; 返回结果 = a + b - c; return 返回结果; } void 实验窗口::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 MessageBoxW(L"测试开始", 0, 0); int 返回值=test1(1000,200,3); CString 输出测试; 输出测试.Format(L"测试结束,输出内容:%d", 返回值); MessageBoxW(输出测试); }如上图,如何避免自己写的函数test1()被内联优化掉
什么叫内联优化?如果标记函数被编译器内联了,它在汇编里就消失了(直接变成几行无用的赋值,甚至被完全删掉),你就找不到call指令了。保留非内联的call,才能在反汇编里一眼看见。
在函数名前加上__declspec(noinline) 和函数内部定义一个变量加上volatile就行了
测试结果如下