首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >boost::进程间内存大小

boost::进程间内存大小
EN

Stack Overflow用户
提问于 2012-05-14 15:48:28
回答 1查看 906关注 0票数 1

我有一个保存地图容器SharedMapmanaged_shared_memory对象,其定义如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef std::pair<std::string, T> ValueType;
typedef allocator<ValueType, managed_shared_memory::segment_manager> ShmemAllocator;
typedef map<std::string, T, std::less<std::string>, ShmemAllocator> SharedMap;

我的问题是我需要确定我正在使用的共享内存的大小。映射的键是一个未知大小的std::string,数据是一个未知大小的模板类型,其中每个数据的大小都是不同的。

有没有人能建议我如何跟踪我正在使用的内存?

我刚接触boost::interprocess,所以任何建议都会有很大的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-15 20:31:59

我通过使用异常处理解决了这个问题。我插入到映射中,直到抛出bad_alloc异常。我捕获了异常并重新调整了共享内存的大小。

我使用了static bool grow(const char *shmname, size_type extra_bytes)方法,它应该是managed_shared_memory的成员函数

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10586699

复制
相关文章
进程间通信
进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?首先,进程间通信至少可以通过传送、打开文件来实现,不同的进程通过一个或多个文件来传递信息,事实上,在很多应用系统里都使用了这种方法。但一般说来,进程间通信(Inter Process Communication,IPC)不包括这种似乎比较低级的通信方法。UNIX系统中实现进程间通信的方法很多,而且不幸的是,极少方法能在所有的UNIX系统中进行移植(唯一一种是半双工的管道,这也是最原始的一种通信方式)。而Linux作为一种新兴的操作系统,几乎支持所有的UNIX下常用的进程间通信方法:管道、消息队列、共享内存、信号量、套接字等。其中,前面4种主要用于同一台机器上的进程间通信,而套接字则主要用于不同机器之间的网络通信。
宇宙之一粟
2022/05/13
9710
进程间通信
什么是管道? 可以理解为内存中的一个缓冲区,用于将某个进程的数据流导入,由某一个进程导出,实现通信。 再通俗的说,看图:
看、未来
2020/08/26
8510
进程间通信
进程间通信
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。
大学里的混子
2019/03/12
9000
进程间通信
由于管道仅仅是将一个进程的读端和另一个进程的写端连通的单通信方法,所以又叫“半双工管道”。在shell中管道用“|”表示。 管道的历史很悠久了。
看、未来
2020/08/26
5790
进程间通信
https://mp.weixin.qq.com/s/mblyh6XrLj1bCwL0Evs-Vg
猎户星座1
2020/08/10
8050
进程间通信
进程间通信介绍 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程。 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另 一个进程的所有陷入和异常,并能够及时知道它的状态改变。 进程间通信发展 管道 System V进程间通信 POSIX进程间通信 管道 什么是管道 管道是Unix中最古老的进程间通信的
海盗船长
2020/08/27
1K0
[Linux] 进程间通信
1.管道(Pipe)及有名管道(namedpipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信 2.信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数) 3.消息队列:消息队列是消息的链接表,包括Posix消息队列systemV消息队列.有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息.消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点. 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式.是针对其他通信机制运行效率较低而设计的.往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥. 4.信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。 5.套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信.起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和SystemV的变种都支持套接字. PHP版本实现:https://www.jianshu.com/p/08bcf724196b
唯一Chat
2019/09/10
7410
[Linux] 进程间通信
进程间通信
结果面试过程只花了 5 分钟就结束了,面完的时候,天还是依然是亮的,还得在烈日下奔波 1 小时回去。
用户1263954
2022/02/17
5180
进程间通信
linux多进程与进程间通信_linux共享内存进程间通信
Linux下进程间通信-共享内存 – 码到城攻共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式
全栈程序员站长
2022/11/07
4.6K0
linux多进程与进程间通信_linux共享内存进程间通信
进程间通讯(四).非亲缘进程间交互信号
UNIX/Linux 是多任务的操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间的通讯就很有必要了
franket
2021/09/15
1K0
进程/线程间通信
因为线程是共享内存空间的,所以线程间通信相比于进程间通信会简单一些,线程间通信的体现
Helloted
2022/06/07
7100
进程/线程间通信
python 进程间通信
multiprocessing 在2.6才开始使用 multiprocessing 是一个使用方法类似threading模块的进程模块。允许程序员做并行开发。并且可以在UNIX和Windows下运行。 通过创建一个Process 类型并且通过调用call()方法spawn一个进程。 一个比较简单的例子: #!/usr/bin/env python from multiprocessing import Process import time def f(name): time.sleep(1) print 'hello ',name print os.getppid() #取得父进程ID print os.getpid()  #取得进程ID process_list = [] if __name__ == '__main__': for i in range(10): p = Process(target=f,args=(i,)) p.start() process_list.append(p) for j in process_list: j.join() 进程间通信: 有两种主要的方式:Queue、Pipe 1- Queue类几乎就是Queue.Queue的复制,示例: #!/usr/bin/env python from multiprocessing import Process,Queue import time def f(name): time.sleep(1) q.put(['hello'+str(name)]) process_list = [] q = Queue() if __name__ == '__main__': for i in range(10): p = Process(target=f,args=(i,)) p.start() process_list.append(p) for j in process_list: j.join() for i in range(10): print q.get() 2- Pipe 管道 #!/usr/bin/env python from multiprocessing import Process,Pipe import time import os def f(conn,name): time.sleep(1) conn.send(['hello'+str(name)]) print os.getppid(),'-----------',os.getpid() process_list = [] parent_conn,child_conn = Pipe() if __name__ == '__main__': for i in range(10): p = Process(target=f,args=(child_conn,i)) p.start() process_list.append(p) for j in process_list: j.join() for p in range(10): print parent_conn.recv() Pipe()返回两个连接类,代表两个方向。如果两个进程在管道的两边同时读或同时写,会有可能造成corruption. 进程间同步 multiprocessing contains equivalents of all the synchronization primitives from threading. 例如,可以加一个锁,以使某一时刻只有一个进程print #!/usr/bin/env python from multiprocessing import Process,Lock import time import os def f(name): lock.acquire() time.sleep(1) print 'hello--'+str(name) print os.getppid(),'-----------',os.getpid() lock.release() process_list = [] lock = Lock() if __name__ == '__main__': for i in range(10): p = Process(target=f,args=(i,)) p.start() process_list.append(p) for j in process_list: j.join() 进程间共享状态 Sharing state between processes 当然尽最大
py3study
2020/01/09
6750
node进程间通信
作为一名合格的程序猿/媛,对于进程、线程还是有必要了解一点的,本文将从下面几个方向进行梳理,尽量做到知其然并知其所以然:
用户8200753
2023/10/22
2620
进程间的通信
进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有它自己的优点和局限性,一般,对于单个程序而言使用所有的IPC方法是不常见的。
手撕代码八百里
2020/10/26
7460
进程间的通信
使用 multiprocessing 里的 Queue() import multiprocessing def download_from_web(q): """下载数据""" # 模拟从网上下载的数据 data = [11, 22, 33, 44] # 向队列中写入数据 for temp in data: q.put(temp) print("下载器已经下载完了数据并且存入到队列中") def analysis_data(q)
py3study
2020/01/17
6450
Python进程间通信
可以使用 multiprocessing 模块的 Queue 实现多进程之间的数据传递,Queue本身是一个消息队列程序,首先用一个小实例来演示一下Queue的工作原理:
ZackSock
2021/04/13
6090
进程间通信(IPC)
前几天面试官问你知道IPC麽?平时没接触这个,面试回来之后,恶补其中的知识。进程间存在很多通信方式,本文将介绍几种常用的。
jiewuyou
2022/09/29
7320
进程间的7种通信方式_linux 进程间通信
进程通信: 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。
全栈程序员站长
2022/11/07
2.7K0
3、进程间通信
本书主要介绍如何使用微服务架构构建应用程序,这是本书的第三章。第一章介绍了微服务架构模式,将其与单体架构模式进行对比,并讨论了使用微服务的优点与缺点。第二章描述了应用程序客户端通过扮演中间人角色的 API 网关与微服务进行通信。在本章中,我们来了解一下系统中的服务是如何相互通信的。第四章将详细探讨服务发现方面的内容。
Java架构师历程
2018/09/26
1.3K0
3、进程间通信
Linux进程间通信
我们在Linux信号基础中已经说明,信号可以看作一种粗糙的进程间通信(IPC, interprocess communication)的方式,用以向进程封闭的内存空间传递信息。为了让进程间传递更多的信息量,我们需要其他的进程间通信方式。这些进程间通信方式可以分为两种: 管道(PIPE)机制。在Linux文本流中,我们提到可以使用管道将一个进程的输出和另一个进程的输入连接起来,从而利用文件操作API来管理进程间通信。在shell中,我们经常利用管道将多个进程连接在一起,从而让各个进程协作,实现复杂的功能。 传
Vamei
2018/01/18
3.8K0
Linux进程间通信

相似问题

boost进程间容器中的boost进程间错误

12

Boost进程间矢量碰撞

15

boost进程间共享互斥和boost共享互斥的进程间条件变量

13

如何提取Boost进程间库

12

boost进程间是否支持共享包含进程间指针的对象?

246
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文