共享内存与线程局部存储_PHPer_百度空间
原文:http://blog.csdn.net/lvwenshuai/archive/2008/05/06/2398981.aspx

这些工作由内核配合MMU硬件完成,内 存管理是操作系统内核的重要功能。其中为了优化性能,使用了不少高级技术,所以内存管理通常比较复杂。比如:在决定把什么数据换出到磁盘上时,采用最近最 少使用的策略,把常用的内存数据放在物理内存中,把不常用的写到磁盘上,这种策略的假设是最近最少使用的内存在将来也很少使用。在创建进程时使用 COW(Copy on Write)的技术,大大减少了内存数据的复制。为了提高从虚拟地址到物理地址的转换速度,硬件通常采用TLB技术,把刚转换的地址存在cache里,下 次可以直接使用。

也许我们很少直接使用共享内存,实际上 除非性能上有特殊要求,我更愿意采用socket或者管道作为进程间通信的方式。但我们常常间接的使用共享内存,大家都知道共享库(或称为动态库)的优点 是,多个应用程序可以公用。如果每个应用程序都加载一份共享库到内存中,显然太浪费了。所以操作系统把共享库放在共享内存中,让多个应用程序共享。另外, 同一个应用程序运行多个实例时,也采用同样的方式,保证内存中只有一份可执行代码。这样的共享内存是设为只读属性的,防止应用程序无意中破坏它们。当调试 器要设置断点时,相应的页面被拷贝一分,设置为可写的,再向其中写入断点指令。这些事情xx由操作系统等底层软件处理了,应用程序本身无需关心。

HANDLE CreateFileMapping(
 HANDLE hFile,                       // handle to file
 LPSECURITY_ATTRIBUTES lpAttributes, // security
 DWORD flProtect,                    // protection
 DWORD dwMaximumSizeHigh,            // high-order DWORD of size
 DWORD dwMaximumSizeLow,             // low-order DWORD of size
 LPCTSTR lpName                      // object name
);
BOOL UnmapViewOfFile(
 LPCVOID lpBaseAddress   // starting address
);


郑重声明:资讯 【共享内存与线程局部存储_PHPer_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——