12 2012 档案
摘要:例如有一个base类型的class,有成员函数fun,当执行class.fun(),那么C++编译器会先进行如下转换:如果是非静态函数成员:1.改写函数原型,class.fun()变成class::fun( base const *this),如果是const,则变成class::fun(const base const *this)2.将fun函数里面对于非静态成员函数的存取操作改成又this指针来存取,比如fun里面访问了成员函数a,那么编译器会改写成this->a3.对成员函数经过mangling,即矫正,变成外部函数,而这个外部函数的名称是独一无二一的,比如class.fun()
阅读全文
摘要:所谓异步IO,就是当线程向设备驱动程序发送一个IO请求后,线程不会等待处理,而是继续执行,设备驱动程序去完成实际的IO操作,再通过其他方式通知程序注意:如果我们发送一个异步IO请求给设备驱动程序,设备驱动程序不一定会以异步处理IO请求,有时候会选择以同步的方式来请求。当我们IO请求发送后,操作系统检查我们的数据是否在系统的缓存中,如果在缓存中,那么操作系统不会把这个请求发送给设备驱动程序,而会直接将数据从高速缓存中复制给我们的程序,直接完成IO请求如果IO操作是以同步方式执行的,那么ReadFile和WriteFile将会返回非0值,如果是以异步的,或者发生了错误,那么将会返回FALSE1.O
阅读全文
摘要:什么是dll:dll只是一组源代码的模块,每个模块包含一些可供应用程序或者其他dll调用的函数,在应用程序调用一个dll里面的函数的时候,操作系统会将dll的文件映像映射到进程的地址空间中,这样进程中所有的线程就可以调用dll中的函数了dll加载完成后,这个时候dll对于进程中的线程来说只是一些被放在地址进程空间附加的代码和数据,操作系统为了节省内存空间,同一个dll在内存中只有一个,也就是说如果你的的两个应用程序都需要加载user32.dll,那么操作系统也只会加载一次user32.dll到内存中因为代码段在内存中的权限都是为只读的,所以当多个应用程序加载同一个dll的时候,不用担心应用程序
阅读全文