博客
关于我
#pragma data_seg() 共享数据// MyData段 // 进程 // DLL
阅读量:794 次
发布时间:2023-01-24

本文共 940 字,大约阅读时间需要 3 分钟。

在一个Win32程序的地址空间中,Windows系统默认执行了一道生杀性之墙。一个程序的地址空间内的数据通常都是私有的,其他程序看不到。但是当我们以STRPROG程序的形式创建多个实例时,STRLIB库中的数据却可以在不同实例之间毫无问题地共享。例如,当你在一个STRPROG窗口中添加或删除一个字符串时,这个操作会立即反映到其他窗口中。

在STRLIB中,共享的内存段共享了两个变量:一个字符数组和一个整数(用于记录已存储的有效字符串的数量)。为了实现这一点,必须使用#pragma data_seg("shared")来创建一个共享的内存段。 AppleWebKit

cooked

مسیرهای scratches

...

在DLL中定义一个共享的内存段非常重要,尤其是要保证全局变量能够被多个进程共享。Microsoft编译器会把没有初始化的变量放在BSS段中,这样可以导致共享行为失败。因此,在DLL中共享数据时,必须对变量进行专门的初始化。

我们的共享数据段名為"shared",您可以用任何名字。参照下面的例子:

#pragma data_seg ("shared")
int iTotal = 0;
WCHAR szStrings[MAX_STRINGS][MAX_LENGTH + 1] = { '\0' };
#pragma data_seg ()

链接器必须知道 jellyfish

知道有個"shared"共享內存段。籍為Project Settings對話框, QObject

選擇Link頁面,瀏覽 statusBar

來 Conservative

選擇"STRLIB" 時,在 projectOptions字段中 (Release和Debug的設定中都包含),添加以下連接標誌:

/SECTION:shared,RWS

「RWS」代表段有读、寫和共享属性。或者,您可以直接設定DLL的原始代碼,像STRLIB.C樣那样(《windows 编程》教學動畫庫)。

共享內存段的大小為32,772字节。iTotal變量占用4字節,256個指針,每個指針占用128字節。MAX_STRINGS定義為256,MAX_LENGTH 定義為63。

轉載自: URL

你可能感兴趣的文章
02-docker系列-镜像分类以及操作(导入、导出、删除)
查看>>
02-Docker镜像分类及操作秘籍,轻松掌握导出、导入、删除
查看>>
03-docker容器的基本操作
查看>>
03-docker系列-docker容器的基本操作
查看>>
04-docker-commit构建自定义镜像
查看>>
04-docker系列-commit构建自定义镜像
查看>>
05-docker系列-使用dockerfile构建镜像
查看>>
05-如何通过Dockerfile实现高效的应用容器化?
查看>>
06-docker系列-使用dockerfile构建nginx、redis镜像
查看>>
06-使用dockerfile构建nginx、redis镜像
查看>>
07-docker系列-使用dockerfile构建python、jenkins镜像
查看>>
07-使用dockerfile构建python、jenkins镜像
查看>>
08-docker系列-docker网络你了解多少(上)
查看>>
09-docker系列-docker网络你了解多少(下)
查看>>
1 解决XP重装后原文件夹拒绝访问
查看>>
10-docker系列-docker文件共享和特权模式
查看>>
#C2#S2.2~S2.3# 加入 factory/objection/virtual interface 机制
查看>>
#C8# UVM中的factory机制 #S8.1.1# OOP 语言三大特性 systemverilog的支持
查看>>
#C8# UVM中的factory机制 #S8.1.3# UVM实战代码再剖析
查看>>
#C8# UVM中的factory机制 #S8.1.4# 约束的重载
查看>>