关于VC2008的编译优化功能:有没有部分不优化的方法,该如何处理
关于VC2008的编译优化功能:有没有部分不优化的方法
VC的优化做的很不错,如选择"最大化速度(/O2)"的时候如下一段代码
被编译成:
语句a>b被编译成了 cmp eax,0C6h
变量a被VC直接替换成了一个常数出现在指令里.这样执行速度会变快,但是在有些地方并不希望常数出现在指令里.如在一些验证软件授权的地方,可能被别人用CE搜索一下就定位到验证的地方.所以我想在VC里有没有哪个语句可以阻止VC优化指定的一段代码(但是整个程序还是要让它优化)
------解决方案--------------------
可以的, 在解决方案里面找到c或者c++文件右键, 选择属性, 可以单独对单个文件设置编译选项
------解决方案--------------------
VC的优化做的很不错,如选择"最大化速度(/O2)"的时候如下一段代码
- C/C++ code
int a=0xC6; void CEncodeTestDialog::OnBnClickedButton1() { int b=::rand(); if(a>b) { ::MessageBoxA(0,"jj","kkk",0); } }
被编译成:
- Assembly code
int a=0xC6; void CEncodeTestDialog::OnBnClickedButton1() { int b=::rand(); 00401390 E8 6E CC 01 00 call rand (41E003h) if(a>b) 00401395 3D C6 00 00 00 cmp eax,0C6h 0040139A 7D 14 jge CEncodeTestDialog::OnBnClickedButton1+20h (4013B0h) { ::MessageBoxA(0,"jj","kkk",0); 0040139C 6A 00 push 0 0040139E 68 C0 7E 43 00 push offset string "kkk" (437EC0h) 004013A3 68 C4 7E 43 00 push offset string "jj" (437EC4h) 004013A8 6A 00 push 0 004013AA FF 15 D0 24 43 00 call dword ptr [__imp__MessageBoxA@16 (4324D0h)] }
语句a>b被编译成了 cmp eax,0C6h
变量a被VC直接替换成了一个常数出现在指令里.这样执行速度会变快,但是在有些地方并不希望常数出现在指令里.如在一些验证软件授权的地方,可能被别人用CE搜索一下就定位到验证的地方.所以我想在VC里有没有哪个语句可以阻止VC优化指定的一段代码(但是整个程序还是要让它优化)
------解决方案--------------------
可以的, 在解决方案里面找到c或者c++文件右键, 选择属性, 可以单独对单个文件设置编译选项
------解决方案--------------------
- C/C++ code
#pragma optimize( "", off ) . . . #pragma optimize( "", on )