小编lek*_*ekv的帖子

如何在linux上使用copy-on-write来处理共享内存

我尝试编写一个小应用程序来熟悉用户空间中的写时复制概念.我已经阅读了MSalters回答,并认为只有当我开始使用mmap'ed文件存储我的数据时它才会起作用.因为我不需要基于文件的持久性,我试图用共享内存做同样的事情.首先我mmap编写并初始化了一个shm fd,然后我MAP_PRIVATE再次映射了第二个副本并从中读取.但是,只需读取它就会导致内核复制整个内容,花费更多时间并占用内存的两倍.为什么不做COW?

这是我提出的用于说明行为的程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <assert.h>

static const size_t ARRAYSIZE = 1UL<<30;

void init(int* A)
{
    for (size_t i = 0; i < ARRAYSIZE; ++i)
        A[i] = i;
}

size_t agg(const int* A)
{
    size_t sum = 0;
    for (size_t i = 0; i < ARRAYSIZE; ++i)
        sum += A[i];
    return sum;
}

int main()
{
    assert(sizeof(int) == 4);
    shm_unlink("/cowtest");
    printf("ARRAYSIZE: …
Run Code Online (Sandbox Code Playgroud)

c++ linux memory memory-management shared-memory

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

标签 统计

c++ ×1

linux ×1

memory ×1

memory-management ×1

shared-memory ×1