15得票9回答
从CopyOnWriteArrayList中删除元素

在使用迭代器从CopyOnWriteArrayList中移除元素时,我遇到了异常。我注意到文档中有说明: 迭代器本身上的修改操作(remove,set和add)是不支持的。这些方法会抛出UnsupportedOperationException。 (来自http://downloa...

15得票1回答
Python多进程在OSX和Ubuntu上的“写时复制”行为不同

我正在尝试在Python中在父进程和子进程之间共享对象。为了玩弄这个想法,我创建了一个简单的Python脚本:from multiprocessing import Process from os import getpid import psutil shared = list(rang...

14得票5回答
为什么VC++的字符串没有引用计数?

STL标准并不要求std::string必须是引用计数的。但实际上,大多数C++实现提供了引用计数、写时复制字符串的方式,使得您可以将字符串作为原始类型通过值传递。此外,这些实现(至少g++)使用原子操作,使得这些字符串无锁并且线程安全。 简单的测试表明具有写时复制语义:#include &...

14得票1回答
什么是隐式共享?

我正在用C++构建一个游戏引擎库。不久之前,我使用Qt构建应用程序,并对其使用隐式共享的方式感到非常着迷。我想知道是否有人能够更详细地解释这种技术,或者提供一个简单的实现示例。

13得票1回答
R中矩阵的原位修改

有没有办法避免在R中进行矩阵原地修改时的复制? 我想将一个较小的矩阵复制到较大矩阵的一部分,如下所示。library(data.table) y <- matrix(c(11,21,31,12,22,32),nrow=3,ncol=2) address(y) [1] "08429190...

13得票1回答
R: 选择子集而不复制

有没有一种方法可以从对象(数据框架、矩阵、向量)中选择子集而不进行复制? 我处理相当大的数据集,但从不更改它们。然而,为了方便起见,我经常选择要操作的数据子集。每次复制大量子集非常浪费内存,但是普通索引和subset(因此xapply()函数族)都会创建选定数据的副本。因此,我正在寻找可以解...

12得票1回答
使用不需要fork()的方式实现fork()的写时复制行为

我有一个大缓冲区:char *buf = malloc(1000000000); // 1GB 如果我分叉了一个新进程,它会有一个缓冲区与父进程的缓冲区共享内存,直到其中一个写入为止。即使如此,内核只需要分配一个新的4KiB块,其余部分仍将继续共享。 我想复制buf,但我只会改变复制品的一点...

12得票2回答
Copy-on-write是否会防止数组数据重复?

我正在使用PHP编写一个Web API客户端,将CSV数据解析为关联数组,并希望在使用这些数组时保护我的用户免受数据重复的影响。 理论上来说,我的用户永远不会对这些数组进行写操作(虽然可能会,但实际上没有意义)。 现在我的问题是...如果我的用户将这些数组作为参数传递给方法,PHP的写时复...

11得票2回答
fork()中的写时复制是如何工作的?

我希望知道fork()中如何发生写时复制。 假设我们有一个拥有动态整型数组的进程A: int *array = malloc(1000000*sizeof(int)); 数组中的元素被初始化为一些有意义的值。 然后,我们使用fork()函数创建一个子进程,即B。 B将迭代数组并进行一些...

11得票2回答
STL中的写时复制支持

我刚刚在阅读维基百科上的Copy-on-write文章(好奇是否有任何支持它的文件系统),并对以下段落感到惊讶: COW还被用于内核之外,包括库、应用程序和系统代码。例如,C++标准库提供的字符串类就是专门设计用于支持写时复制实现: std::string x("Hello"); st...