进程共享数据段使用类变量的问题?

fhw217 2018-05-01 06:36:35
将下面代码编译为exe,连续执行两次程序,第二个进程a.m_n的值还是100,请问这是什么原因?该如何修改源代码?


#include "stdafx.h"
#include <stdio.h>
#include <conio.h>

class A
{
public:
int m_n;
A(int n);
};

A::A(int n)
{
m_n = n;
}

#pragma data_seg("abc")
A a = A(100);
#pragma data_seg()
#pragma comment(linker, "/SECTION:abc,RWS")

int main()
{
printf("类变量值:%d\n", a.m_n);
a.m_n *= 2;

return _getch();
}
...全文
965 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhw217 2018-05-06
  • 打赏
  • 举报
回复
接上贴:删除A::A(int n) { ... } 函数
fhw217 2018-05-06
  • 打赏
  • 举报
回复
解决了:

//...
#pragma data_seg("abc")
A a = { 100 };
#pragma data_seg()
//...
worldy 2018-05-04
  • 打赏
  • 举报
回复
引用 2 楼 wyyy2088511 的回复:
一般共享内存到dll中并且初始化,才能访问是相同的。
进程间共享内存,必须创建共享实现,不能简单的定义变量就可以共享 // 创建共享文件句柄 HANDLE hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // 物理文件句柄 NULL, // 默认安全级别 PAGE_READWRITE, // 可读可写 0, // 高位文件大小 BUF_SIZE, // 地位文件大小 szName // 共享内存名称 ); char *pBuf = (char *)MapViewOfFile( hMapFile, // 共享内存的句柄 FILE_MAP_ALL_ACCESS, // 可读写许可 0, 0, BUF_SIZE );
赵4老师 2018-05-04
  • 打赏
  • 举报
回复
引用 8 楼 shiyanbo_1006 的回复:
百度谷歌,搜素共享内存关键字
你这个回答有点我的风格。
待续_1006 2018-05-04
  • 打赏
  • 举报
回复
百度谷歌,搜素共享内存关键字
赵4老师 2018-05-03
  • 打赏
  • 举报
回复
Microsoft SDK\samples\winbase\SharedMem\Consumer.Cpp Microsoft SDK\samples\winbase\SharedMem\Makefile Microsoft SDK\samples\winbase\SharedMem\Producer.Cpp Microsoft SDK\samples\winbase\SharedMem\Queue.h Microsoft SDK\samples\winbase\SharedMem\ReadMe.Txt Microsoft SDK\samples\winbase\SharedMem\Common.h
schlafenhamster 2018-05-02
  • 打赏
  • 举报
回复
类的 static 变量 属于类本身, 而非 static 变量 属于实例、
jena_wy 2018-05-02
  • 打赏
  • 举报
回复
一般共享内存到dll中并且初始化,才能访问是相同的。
schlafenhamster 2018-05-02
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>

class A
{
public:
static int m_n;
};


#pragma data_seg("abc")
int A::m_n = 100;
#pragma data_seg()

#pragma comment(linker, "/SECTION:abc,RWS")

int main()
{    
	printf("类变量值:%d\n", A::m_n);
	A::m_n *= 2;
	return _getch();
}
schlafenhamster 2018-05-02
  • 打赏
  • 举报
回复
A a = A(100); 总是 在 main 前 执行!
smwhotjay 2018-05-02
  • 打赏
  • 举报
回复
建议看windows核心编程 共享数据段那块
worldy 2018-05-02
  • 打赏
  • 举报
回复
两次执行是在不同的进程空间里,是各自独立运行的实例,数据不会互相影响

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧