对于极致要求体积的程序来说。抛弃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. JavaScript精要(系列)

    JavaScript精要系列 JavaScript精要(六):JavaScript DOM节点和文档类型 JavaScript精要(五):JavaScript数组类型 JavaScript精要(四): ...

  2. gradle相关配置内容解析

    gradle 项目的构建工具,基于groovy语言.主要用于管理依赖包. as中一般将gradle下载在C:\Documents and Settings<用户名>.gradle\wrap ...

  3. Codeforces 722C. Destroying Array

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. NHibernate Query

    1) Sql Group by .... 之前是这么写的,因为DateTime是YYYY-MM-DD HH:mm:SS 模式,我只想group 日期.这种写法再mysql,sqlserver.orac ...

  5. php访问远程服务器上的文件

    test.php <?php $fp=fopen('http://www.baidu.com', 'r'); while (!feof($fp)) { $chunk=fgets($fp); ec ...

  6. 常用SVN命令

    SVN命令 svn co  svn://10.144.156.41/branches/webroot_2015_03_03_gift 表示check远程目录到当前目录下,co命令只能check目录,如 ...

  7. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  8. js this理解

    原文链接:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html this是js语言的几个关键字,代表 ...

  9. ADO.NET 基础 (SQL Server)

    一.Web.config配置 <connectionStrings> <add name="constr_name" connectionString=" ...

  10. centos中安装字体

    转载自:http://blog.csdn.net/wlwlwlwl015/article/details/51482065 在使用phantomjs做自动化网页截图时,发现截图都没有文字.最后好久才发 ...