在c++中可以使用LoadLibrary来动态加载dll,最近遇到了一个跟发布有关的问题。在自己的电脑上运行没问题,但是在客户机上却LoadLibrary失败,返回126的错误。使用Dependency walker分析之后,发现是要动态加载的类库依赖另外一个类库,客户机找不到该类库,所以失败。下面简单介绍一下Dependency walker的使用方法。

Dependency walker是一个可以用来查看windows上可执行文件依赖库的工具。可以用来分析库的装载相关的错误。

Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. For each module found, it lists all the functions that are exported by that module, and which of those functions are actually being called by other modules. Another view displays the minimum set of required files, along with detailed information about each file including a full path to the file, base address, version numbers, machine type, debug information, and more.

阅读全文 »

最近在看《c++ primer》,里面涉及到很多关于const相关的一些概念,比如顶层const,底层const,const函数重载等,以下是自己的一些总结,作为备忘。

阅读全文 »

作为一名非科班程序员,经常在碰到一些操作系统相关的概念时蒙逼。特别是看前段时间看nginx源码的时候,涉及到一些I/O多路复用的代码。碰到问题,碰到不懂的名词,去网上搜索,也就能了解个大概,一些系统性的东西还是很有必要去系统性的学习。于是购入了一本《操作系统:精髓与设计原理》,打算好好读一遍。至于为什么没有买传说中的龙书(深入理解计算机系统)。。。主要是当时不知道有龙书,买完才发现大多数都推崇龙书。

本文姑且作为学习《操作系统》这本书的学习大纲吧。下面先按着书的章节列一下大纲。以后分别出各个主题的博文。坚持!

阅读全文 »

Memory Mapped File (MMF),内存映射文件。该技术将一个文件或者其他对象映射到进程的地址空间(虚拟内存),实现文件磁盘地址和进程虚拟地址空间中的一段虚拟地址的一一映射关系。

为什么要使用MMF?

MMF可以提高I/O性能,特别是对于大文件来说。

因为常规文件操作需要从磁盘到页缓存再到用户主存的两次数据拷贝。而mmap操控文件,只需要从磁盘到用户主存的一次数据拷贝过程。说白了,mmap的关键点是实现了用户空间和内核空间的数据直接交互而省去了空间不同数据不通的繁琐过程。因此mmap效率更高。

阅读全文 »

最近打算读读开源项目的源码,正好一年前买的《深入理解Nginx》这本书还一直落灰,就准备读读Nginx的源码吧。在Github下载源码之后,干看代码不好理解,得像个办法Debug啊,于是乎有了用VMware折腾下Ubuntu,学学如何使用GCC和GDB。这就是本文的由来。

阅读全文 »