windows笔记-在可执行文件或DLL的多个实例之间共享静态数据
全局数据和静态数据不能被同一个. exe或DLL文件的多个映像共享,这是个安全的默认设置。但是,在某些情况下,让一个. exe文件的多个映像共享一个变量的实例是非常有用和方便的.
每个. exe或DLL文件的映像都由许多节组成。按照规定,每个标准节的名字均以圆点开头。
每一节都拥有与其相关的一组属性
exe或DLL文件各节的属性
属性 |
含义 |
READ |
该节中的字节可以读取 |
WRITE |
该节中的字节可以写入 |
EXECUTE |
该节中的字节可以执行 |
SHARED |
该节中的字节可以被多个实例共享(本属性能够有效地关闭copy-on-write机制) |
常见的节名及作用
节名 |
作用 |
.bss |
未经初始化的数据 |
.CRT |
C运行期只读数据 |
.data |
已经初始化的数据 |
.debug |
调试信息 |
.didata |
延迟输入文件名表 |
.edata |
输出文件名表 |
.idata |
输入文件名表 |
.rdata |
运行期只读数据 |
.reloc |
重定位表信息 |
.rsrc |
资源 |
.text |
. e x e或D L L文件的代码 |
.tls |
线程的本地存储器 |
.xdata |
异常处理表 |
怎么查看这些节
可以用使用:Microsoft的Visual Studio的DumpBin实用程序
有一个更方便的工具:eXeScope.exe
怎么创建自己的节并让多个实例共享数据
- 自定义一个节
- 把变量放到自定义节中
- 注意变量要初始化。
- 告诉链接程序,某个节中的变量是需要加以共享的
如下:
#pragma comment(linker, "/SECTION:Shared,RWS")
#pragma data_seg("Shared")
long g_nCount1 = 0;
#pragma data_seg()
也可以用allocate把某变量加入到自定义节中,如下
__declspec(allocate("Shared")) long g_nCount3 = 0;
#include "stdafx.h"
#include "stdlib.h"
#include <iostream>
using namespace std;
#pragma comment(linker, "/SECTION:Shared,RWS") // 告诉链接程序,某个节中的变量是需要加以共享的
#pragma data_seg("Shared") // 创建一个称为“Shared”的节
long g_nCount1 = 0;
long g_nCount2;
#pragma data_seg()
// 也可以用allocate把某变量加入到自定义节中
__declspec(allocate("Shared")) long g_nCount3 = 0;
int _tmain(int argc, _TCHAR* argv[])
{
cout << "g_nCount1: " << ++g_nCount1 << " // 有初始化, 有加到自定义节中" << endl;
cout << "g_nCount2: " << ++g_nCount2 << " // 没有初始化,没有加到自定义节中" << endl;
cout << "g_nCount3: " << ++g_nCount3 << " // 利用__declspec(allocate(\"Shared\")) 把变量加到自定义节中" << endl;
system("pause");
return 0;
}
多次运行本例子:可以看到g_nCount1和g_nCount3在递增,而g_nCount2保持不变。
本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/07/11/1775277.html
windows笔记-在可执行文件或DLL的多个实例之间共享静态数据的更多相关文章
- [笔记]Delphi 2007写DLL供VC调用实例
考虑如下几种常用情况: - VC传入int,返回int- VC传入char *,返回int- VC传入char *,返回char *及int 为简化问题,传递的字符串参数只考虑ANSI格式,不考虑UN ...
- [原创]使用GCC创建 Windows NT 下的内核DLL
原文链接:使用GCC创建 Windows NT 下的内核DLL 在温习<<Windows 2000 Driving>>分层驱动程序一章的时候,看到了关于紧耦合驱动连接方式,这种 ...
- Windows笔记目录
Windows笔记目录 Windows介绍 Windows入门--个人感想 初入Linux AD域控 FTP 服务器及权限 Server-U FTP与AD完美集成方案详解 其他 Linux大文件传 ...
- Windows自删除程序和DLL
Windows自删除程序和DLL 参照文章 http://blog.csdn.net/rxxi/article/details/741557 做了个自删除的程序SelfDelete.代码下载(我的FT ...
- .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的.附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了 ...
- windows使用nginx+memcached实现负载均衡和session或者缓存共享
windows使用nginx+memcached实现负载均衡和session或者缓存共享 两台server server1:115.29.186.215 windows2008 64位操作系统 ser ...
- 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据
http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...
- 纯静态界面中(html)中通过js调用dll中的方法从数据库中读取数据
最近接到一个离职员工的任务,一个搭好框架的ERP系统,看了两天,说一下看到的东西,整个项目目录中我没发现一个.aspx后缀的文件,全是静态HTML文件,之后发现他用的jquery简直看的头疼,不过大概 ...
- Windows Server 2008 安装 10.2.0.5 单实例
需求:Windows Server 2008 安装 10.2.0.5 单实例 原以为非常简单的一次任务,实际却遇到了问题,故记录一下. 1.安装10.2.0.1 2.安装10.2.0.4 3.安装10 ...
随机推荐
- Python - 基本数据类型_Number 数字、bool 布尔、complex 复数
Number 数字,是一个大的分类,细分四小类 整数:int 浮点数:float 布尔:bool 复数:complex int 的栗子 print(type(-1)) print(type(1)) p ...
- matlab——线性规划
@ 目录 前言 一.基本概念 二.matlab实现 1.常用函数 2.常见变形 参考书目 前言 线性规划是数学规划中的一个重要分支,常用于解决如何利用现有资源来安排生产,以取得最大经济效益的问题.本文 ...
- Java基础00-字符串14
1. API 1.1 API概述 2. String String常用类的常用方法 String字符串变量的创建: 声明: String 变量名; String str; 声明并初始化: Str ...
- 痞子衡嵌入式:了解i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择. 关于 i.MXRT 系列 BootROM 中串行 NOR ...
- HTML5-CSS(一)
一.创建 CSS 样式表有三种方式 1. 元素内嵌样式<p style="color:red;font-size:50px;">这是一段文本</p>解释:即 ...
- 前端开发入门到进阶第一集【使用sublime快速编写Html和Css】
1,安装sublime编辑器,下载地址:http://www.sublimetext.com/3 2,要使用sublime的插件机制必须安装package control:https://packag ...
- C++:常量
/** https://www.runoob.com/cplusplus/cpp-constants-literals.html * 常量: 固定值,一旦定义不能被修改 * 整数常量:可以是十进制.八 ...
- 上手Coc.nvim 完全指南
上手Coc.nvim 完全指南 介绍 Coc.nvim 是一个基于NodeJS 的适用于Vim8, Neovim 的Vim 智能补全插件. 拥有完整的LSP 支持.配置.使用方式及插件系统的整体风格类 ...
- iloc与loc总结
pandas中操作DataFrame时候,经常用到**loc,iloc,at,iat,ix** loc函数通过行索引"index"中具体的值来去行的数据(如取"index ...
- Thinkphp中取消url中的index.php 和 Home 默认模块
将配置文件中改: <?phpreturn array( //'配置项'=>'配置值' 'URL_MODEL'=>'2', //去掉url中index.php ' ...