vc的编译参数优化

2016-02-19 20:10 7 1 收藏

有了下面这个vc的编译参数优化教程,不懂vc的编译参数优化的也能装懂了,赶紧get起来装逼一下吧!

【 tulaoshi.com - 编程语言 】

      Author: void#ph4nt0m.org
*/

// 编译器 cl.exe(Visual C++ 6.0)
// 没有做任何优化情况下,编译大小为:16K
// 编译优化后: 1K (用16进制编辑器把尾部的0x00去掉: 712bytes)
#include windows.h
#pragma comment(lib,"kernel32.lib")

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

// 作用: 指定节对齐为512字节
#pragma comment(linker, "/align:512")

// 作用: 合并节
// 将.data节和.rdata节合并到.text节(代码节)
#pragma comment(linker, "/merge:.data=.text")
#pragma comment(linker, "/merge:.rdata=.text")

// 作用: 指定子系统为windows (和优化无关)
// vc编译器默认是console,会有个黑糊糊的CMD窗口,不好看.用windows就好了
#pragma comment(linker, "/subsystem:windows")

// 作用: 指定入口函数
// 子系统为windows的默认入口点WinMain和console的默认入口点main,都会引入一段启动stub代码,指定入口函数可去掉之.
#pragma comment(linker, "/ENTRY:main")


//int WinMain(HINSTANCE current, HINSTANCE prev, LPSTR cmdline, int showcmd)

// 作用: 去掉函数的栈帧代码,纯属吹毛求疵:-)
// 即函数开头的push ebp / mov ebp, esp和结尾的pop ebp / retn
__declspec(naked)
void main()
{
      // 调用wmp. 这是按套路出牌的方法.
      //typedef VOID (__stdcall *fnRunDllW)(HWND, HINSTANCE, LPCWSTR, DWORD);
      //((fnRunDllW)GetProcAddress(LoadLibrary("msdxm.ocx"), "RunDllW"))(0,0,0,0);

    // 不按套路出牌,不压入RunDllW的函数参数,直接调用.
      GetProcAddress(LoadLibrary("msdxm.ocx"), "RunDllW")();
      // 注意此时的堆栈是不平衡的.
      // 但是通过ExitProcess()退出自身,就不用去考虑平衡了.
      ExitProcess(0);
}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1622922.html

延伸阅读
粗略来讲,系统调整一般反映在下列方面: Shared Pool and Library Cache Performance Tuning(共享池和Library Cache):Oracle将SQL语句、存储包、对象信息和很多其他的项目保存在SGA中一个叫共享池(shared pool)的地方。这个可共享的区域由一个成熟的高速缓存和堆管理器管理。它有3个基本的问题要克服: 内存分配的单元不是...
它们有着本质的区别:1:一个是16的DOS程序,一个是标准的32的Windows应用程序.前者依然受着64KB内存分段约束,后者无忧无虑地使用着4GB内存地址空间.它们本来就是运行在不同的操作系统上的.别把他们混淆.DOS程序可以运行在windows上是因为有NTVDM.而你把VC生成的控制台程序放到DOS下只会得到!?This program cannot be run ...
LINUX系统调优记录: 解决 “dst cache overflow” 报警问题 OS:centos4.3 1.可以改变滑动窗口的大小 (默认应该就是“1”) echo "1" /proc/sys/net/ipv4/tcp_window_scaling 2.修改内核共享内存限制为256M,默认才2M echo 268435456 /proc/sys/kernel/shmall echo 268435456 /proc/sys/kernel/shmmax 3。可使用的代理端口 echo ...
一例奇怪的编译错误(VC6) VC6 编译下段代码会报错. 将出错行     if (mmm.end() == itr)        // ERROR 改写为     if (itr == mmm.end())        // OK 就可通过. (g++可以通过.) /**//*      error C2679: b...
许多程序员发现用VC++编写的程序在多处理器的电脑上运行会变得很慢,这种情况多是由于多个线程争用同一个资源引起的。对于用VC++编写的程序,问题出在VC++的内存管理的具体实现上。以下通过对这个问题的解释,提供一个简便的解决方法,使得这种程序在多处理器下避免出现运行瓶颈。这种方法在没有VC++程序的源代码时也能用。 问题 &nb...

经验教程

188

收藏

51
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部