我尝试编写一个小应用程序来熟悉用户空间中的写时复制概念.我已经阅读了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)