博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
managed_shared_memory.construct造成的性能损失
阅读量:6104 次
发布时间:2019-06-21

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

boost中的IPC进程间通信非常好用,可以直接在共享内存上创建对象,相当于new分配器,实测发现它的分配算法还是有点耗时。第一个测试代码仅仅分配一次,然后频繁的复制,每秒钟可以复制4200次左右。

// HelloBoostIPC.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include 
#include
#include
//std::system#include
#include
#include
#include
#include
using namespace std;using namespace boost;using namespace boost::interprocess; char dummy[1280*720*3];class VideoFrame{public: int width; int height; boost::interprocess::interprocess_mutex mutex; char data[1280*720*3];};int _tmain(int argc, _TCHAR* argv[]){ int begin, end, n=0; struct shm_remove { shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } } remover; managed_shared_memory segment(create_only, "MySharedMemory", sizeof(VideoFrame)*24); VideoFrame *frame = segment.construct
("frame")(); while(true) { if(n==0) { begin = ::GetTickCount(); } frame->width = 1280; frame->height = 720; scoped_lock
lock(frame->mutex); memcpy(frame->data, dummy, sizeof(dummy)); n++; if(n==1000) { end = ::GetTickCount(); float t = (end-begin)/1000.0f; int rate = (int)(1000/t); printf("write rate=%d\r\n", rate); n = 0; } } segment.destroy
("frame"); return 0;}

 

如果更换成在循环内部分配内存,再释放,则复制频率下降到3200左右。因此在设计大数据量复制的应用程序时,最好不要频繁创建对象和析构对象,这点和进程内的程序开发是一致的。

转载于:https://www.cnblogs.com/swnuwangyun/p/4861452.html

你可能感兴趣的文章
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
(转)HTML的代码(从朋友那转的,看着觉得会有用就转了)
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>
416. Partition Equal Subset Sum
查看>>
centos7.0 64位系统安装 nginx
查看>>
数据库运维平台~自动化上线审核需求
查看>>
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>