标签: shared-memory

不安全,超快的跨进程内存缓冲区?

跨进程内存缓冲区总是有一些开销,我的理解是这个非常高.但是如果你正在实现一个跨进程渲染缓冲区,那么这与其他数据一样并不重要,因此我们可以使用哪些技术从多个进程中获取一块内存的"原始"访问权限,没有安全网,除了没有崩溃?或者现代操作系统根本无法使用未经提取的内存以使其成为可能...在过去,您无法获得指向内存中任何位置的指针吗?

我正在使用C++,但这个问题适用于Win XP/Vista/7,MacOSX 10.5+(和Linux不太重要).

c++ macos winapi ipc shared-memory

1
推荐指数
1
解决办法
867
查看次数

我们如何使用共享内存段与两个托管进程之间的"对象"共享数据?

如何使用共享内存段在两个托管进程之间共享数据?我"object"在C++/CLI代码中使用,在另一个进程中与内存的其他部分共享数据.我正在使用以下代码段.

#define BUFFER_SIZE 32768   

#pragma data_seg (".SHAREDMEMORY")
    bool _Locked = false;
    bool _Initialized = false;  
    unsigned char[10000] data = NULL;
#pragma data_seg() 

#pragma comment(linker,"/SECTION:.SHAREDMEMORY,RWS")
Run Code Online (Sandbox Code Playgroud)

但我需要它:

#pragma data_seg (".SHAREDMEMORY")
    bool _Locked = false;
    bool _Initialized = false;  
    object^ _object = nullptr;
#pragma data_seg() 

#pragma comment(linker,"/SECTION:.SHAREDMEMORY,RWS")
Run Code Online (Sandbox Code Playgroud)

这是说,"global or static variable may not have managed type System::Int32^"并给出其他错误"missing ; before '^'".

我必须将.NET "Control" 对象的数据复制到此共享段,我需要将其传输到另一个进程.

.net c# ipc c++-cli shared-memory

1
推荐指数
1
解决办法
2566
查看次数

linux动态共享内存在不同的程序中

我在程序A中使用以下代码创建共享内存:

shm = shm_open("/mfs_hash_pool_container", O_CREAT|O_RDWR, 0666);

size = sizeof(struct mfs_hash_pool_container);

ftruncate(shm, size);

mfs_hash_pool_stat_p = (struct mfs_hash_pool_container *)mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, shm, 0);
Run Code Online (Sandbox Code Playgroud)

我用它来存储哈希表.

另一个程序B将从程序A接收addr(mfs_hash_pool_stat_p + offset)发送,但是我不能用B写它.这是否意味着我还必须在B中打开这个共享内存?有没有其他方法可以解决这个问题?因为我自动创建这个内存.

谢谢你们.

c linux shared-memory

1
推荐指数
1
解决办法
9151
查看次数

链接列表在共享内存,linux内核中

这是一个面试问题,我仍然对此感到困惑.

实现2个API - 1.访问共享内存中存在的链表的头部

2.访问头部后面的元素

问题中的内核是Linux.

我在一个论坛上读到,不使用指针,应该使用偏移量(如果不使用指针,它仍然是一个链表)

我真的不明白这一部分.考虑到虚拟内存到位,还会对将要发生的地址转换感到好奇.

抱歉这个问题很模糊,但这是我能想到的.

任何帮助表示赞赏.

谢谢

linux shared-memory

1
推荐指数
1
解决办法
1226
查看次数

使用C++程序删除unix共享内存段

我正在尝试编写一个C++程序来删除共享内存段.我知道可以从cmd提示符使用

ipcs -m | awk '{ print $2 }' | xargs ipcrm -m

但我正在尝试使用C++来创建一个共享内存垃圾收集器.

我们的想法是删除未附加到任何进程(nattach == 0)或status == NULL的共享内存段

c++ unix shared-memory ipcs inter-process-communicat

1
推荐指数
1
解决办法
3989
查看次数

Windows CreateFileMapping:具有相同备份文件的不同文件映射对象

我知道我们可以使用文件映射在两个进程之间共享内容,但这需要相同的文件映射对象.

会发生什么,如果每个进程都有自己的文件句柄创建其自己的文件映射对象,但每个文件句柄指向同一个文件?

谢谢张

c c++ windows shared-memory memory-mapping

1
推荐指数
1
解决办法
770
查看次数

CUDA多线程写入共享变量

我是CUDA的初学者.我这里有一个由2个线程执行的内核.所有线程都应将结果保存到共享变量中.三个完成后,结果sum应该是12但我得到6!

__global__ void kernel (..)
{
    int i=blockDim.x*blockIdx.x+threadIdx.x;

    __shared__ double sum;

        ...

    if(i==0)
        sum=0.0;
    __syncthreads();

    if(i<=1)
        sum+= 2.0*3.0;
    __syncthreads();

    //sum should be 12 here, but I get 6. Why?
}
Run Code Online (Sandbox Code Playgroud)

叫做

test<<<1,2>>>(..);
Run Code Online (Sandbox Code Playgroud)

multithreading cuda gpu thread-safety shared-memory

1
推荐指数
1
解决办法
5855
查看次数

在附加进程时提升删除managed_shared_memory

我有2个进程,进程1创建一个boost managed_shared_memory段,进程2打开这个段.然后重新启动过程1并且过程1的开始具有以下内容,

struct vshm_remove
{
    vshm_remove() 
    { 
        boost::interprocess::shared_memory_object::remove("VMySharedMemory"); 
    }
    ~vshm_remove()
    {
        boost::interprocess::shared_memory_object::remove("VMySharedMemory"); 
    }
} vremover;
Run Code Online (Sandbox Code Playgroud)

我理解当进程1开始或结束时,将在我的共享内存上调用remove方法,但是如果没有附加进程2,它是否只能删除它?我使用以下内容附加到进程2中的共享内存,

boost::interprocess::managed_shared_memory *vfsegment;
vfsegment = new boost::interprocess::managed_shared_memory(boost::interprocess::open_only, "VMySharedMemory");
Run Code Online (Sandbox Code Playgroud)

我注意到无论进程2连接如何都删除了共享内存.

c++ boost ipc shared-memory

1
推荐指数
1
解决办法
4211
查看次数

GPU上可用的共享内存量

我如何知道GPU上可用的共享内存量?我对我可以在共享内存中存储的大数组感兴趣.我的GPU是Nvidia GeForce 650 Ti.我使用VS2013和CUDA工具包进行编码.

我真的很感激,如果有人会解释,我怎么能自己解决,不仅仅给出一个原始数字.

cuda shared-memory

1
推荐指数
1
解决办法
2418
查看次数

在C++中更改out-of-bounds指针的取消引用是否安全?

假设我有一个错误的指针,我会增加以查看下一个内存位置内的内容.我的代码工作正常,没有任何错误或问题.我只是打印出这些内存位置的内容.我在屏幕上看到输出,其中一些内存位置的值为0,其他的包含一些大的负数或正数,似乎按照模式排列.但是如果我尝试更改或覆盖这些内存位置的内容呢?它们代表什么?什么样的数据可以存储在这些存储器位置中,如果这些存储器位置有足够的变化,是否有可能破坏操作系统?

  #include <iostream>
  using std::cout;
  using std::endl;
  int main() {
    int num1 = 5;
    int* bad_ptr = &num1;
    cout << "Address of num1: " << &num1 << endl;
    cout << "Dereference bad pointer: " << *bad_ptr << endl;

    // The bad pointer acesses 500 memory addresses
    for (int i = 0; i < 500; i++) {
      bad_ptr++;
      cout << "Dereference bad pointer: " << *bad_ptr << endl;
      // What if I try to change it?
      // *bad_ptr = 1;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ memory pointers shared-memory

1
推荐指数
1
解决办法
100
查看次数