对于极致要求体积的程序来说。抛弃Msvcrt里的函数是必要的。(尤其是msvcrtXX库)因为要使用mscvrt中的函数,就需要带上相对来 说,不能容忍的几kb的,vcrt初始化函数,包围在我们的WinMain之外,而且对于高版本的msvcrtXX库,在开发某些程序的时候是不能臆想客 户机上就一定安装了对应的run time库了,要静态链接,又不知道大到哪里去了。抛弃mscvrt只是为了编译出来的程序体积小,可以说是针对特殊情况下的,不得已而为之,在不用考虑 体积的情况下,最好不要走这种极端。

抛弃Msvcrt说实话根本没有难度,只是很麻烦。

1.抛弃/GS

/GS是vc运行时库提供的。

如果没有设置,不启用/GS。可能会得到以下链接错误。

error LNK2001: 无法解析的外部符号 @__security_check_cookie@4

2.抛弃C运行时库的new、delete与malloc、free

替代的办法是用WinApi实现自己的版本(c运行时库其实就是对Heap系列的封装),或者直接使用WinApi Heap系列或者Virtual系列分配内存。

3.用ntdll中的RtlXXXMemory函数,替代C运行库提供的宏以及memXXX。

ntdll中导出了RtlMoveMemory、RtlCompareMemory、RtlFillMemory、RtlZeroMemory。完全足够使用。

我 现在的招数还是。。动态调用。。用GetModuleHandle和GetProcAddress,不过听说也能静态,我问了一下大神,大神说那种得用 wdk里提供的ntdll.lib,他不太放心。如果能有不链接这个lib就能静态调用的办法,那就太好了。我还没发现。

4.strXXXX系列wcsXXXX系列

有lstrXXXW/A系列替代或者StrStrX StrChrX等shlwapi。

还有StringCchXXXX和StringCbXXXX。

但是StringCchXXXX和StringCbXXXX属于提供源码的库(函数会被编译加入到我们的程序中),而不是动态链接的,使用这种库体积会比动态链接大一点。

Ps: 如果你完全不需要msvcrt库支持之后,一些什么平时很注意的。。用_beginthreadex代替CreateThread。。这种由于使用 msvcrt库才存在的编程准则。。不再有效。无须纠结。而且去除mscvrt本身就需要。不能调用_beginthreadex这种有msvcrt提供 的函数。

5.设置项目属性的链接器的输入选项。

忽略所有默认库。

将自己用到的库添加进去。

比如kernel32.lib user32.lib shlwapi.lib。

编译一下啊。看看还有什么需要调整的。

一般会看见

error LNK2001: 无法解析的外部符号XXXX

必然是这个函数属于msvcrt那套。需要替换成等价的API

或者你需要的库。你没有添加全。根据msdn里面写着的。调用某个函数需要的库lib添加上lib.

6.改入口点

我比较喜欢用预处理命令。

#pragma comment(linker, "/entry:wWinMain")

项目属性里也有设置。

7.说了这么多。。会有很多人说。。你麻烦不麻烦。你改这么多东西。。为什么不用汇编。。

首先。。我闲汇编麻烦。

其次。。用汇编一定小么?

再次。。你当编译器的性能优化是渣渣?

当然。绝对是有人能写出比编译器优化过的代码还好的汇编代码的,这点我相信。但是我觉得。这个人不是我,也大概不是还会把我这蛋疼文章看到末尾的你。

抛弃msvcrtXX库的更多相关文章

  1. DirectX11--HR宏关于dxerr库的替代方案

    DirectX11 With Windows SDK完整目录 欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报. 综述 参考文章:https://blogs. ...

  2. Golang : pflag 包简介

    笔者在前文中介绍了 Golang 标准库中 flag 包的用法,事实上有一个第三方的命令行参数解析包 pflag 比 flag 包使用的更为广泛.pflag 包的设计目的就是替代标准库中的 flag ...

  3. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  4. 抛弃jQuery:DOM API之选择元素

    原文链接:http://blog.garstasio.com/you-dont-need-jquery/selectors/ 我的Blog:http://cabbit.me/you-dont-need ...

  5. Linux posix线程库总结

    由于历史原因,2.5.x以前的linux对pthreads没有提供内核级的支持,所以在linux上的pthreads实现只能采用n:1的方式,也称为库实现. 线程的实现,经历了如下发展阶段: Linu ...

  6. scikit-learn 线性回归算法库小结

    scikit-learn对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析,本文就对这些类库的使用做一个总结,重点讲述这些线性回归算法库的不同和各自的使用场景. 线性回归的目的是要得到输 ...

  7. Generator库co4.6使用及源码分析

    原文链接 http://www.cnblogs.com/ytu2010dt/p/6043947.html co4.x已经抛弃了原来thunk转而结合promise实现. 一:promise proms ...

  8. HAL驱动库学习-ADC

    如何使用ADC驱动库 1  实现如下两个函数     a: HAL_ADC_MspInit()使能ADC时钟,设置时钟源, 使能ADC Pin,设置为输入模式,可选 DMA,中断     b:HAL_ ...

  9. VS中Debug和Realease、及静态库和动态库的区别整理(转)

    原文出自:http://www.cnblogs.com/chensu/p/5632486.html 一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不 ...

随机推荐

  1. getRuntime

    private static void test() { try { Process process = Runtime.getRuntime().exec("cmd"); Dat ...

  2. javascript创建文档碎片节点

    在<javascript高级程序设计>一书的6.3.5:创建和操作节点一节中,介绍了几种动态创建html节点的方法,其中有以下几种常见方法: · crateAttribute(name): ...

  3. 网页qq客服代码并自定义图片

    <script>var online= new Array();</script> <script src="http://webpresence.qq.com ...

  4. ROS学习笔记(二)——ubantu 14.04 安装

    0.采用双系统安装(U盘安装) 1.安装文件在ubantu官网下载: ubantu官网 :https://www.ubuntu.com/ ubuntu的server版和desktop版有什么区? (来 ...

  5. CentOS 配置防火墙操作实例(启、停、开、闭端口):

    CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service   iptables status< ...

  6. j.APR连接器整体框图(含SSL实现分析)

    APR连接器的思路和bio,nio的整体架构也是类似的,可以看到下面的整体框图: 第一个区别是,对于从Acceptor线程中的socket解析这块,无论是nio还是bio都是在Acceptor线程内直 ...

  7. R语言实战(二)数据管理

    本文对应<R语言实战>第4章:基本数据管理:第5章:高级数据管理 创建新变量 #建议采用transform()函数 mydata <- transform(mydata, sumx ...

  8. express+gulp构建项目(二)启动项目和主文件

    这一次整理的内容是项目主文件和如何启动项目. 启动项目 通过nodejs官网的例子https://nodejs.org/docs/latest-v4.x/doc/api/synopsis.html我们 ...

  9. Hprose question

    1 在服务端 接口的开发中 如果定义了index()方法 中间不能够有参数,否则报错. 2 接口方法中的参数 最好使用单参数 如fun($uid ) 或者 如果需要多个参数 fun($param){$ ...

  10. Win7/Win8/Win8.1/Win10下的DragEnter DragDrop事件不触发

    Win7/Win8/Win8.1/Win10下的DragDrop事件不触发 2011-02-02  来自:博客园  字体大小:[大 中 小] 摘要:你的应用程序需要从windows资源管理器拖动文件到 ...