问题标签 [copy-on-write]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4078 浏览

c++ - 关于 Copy-On-Write 和 shared_ptr 的困惑

我已经在网上搜索并阅读了有关shared_ptr. SO上有一个回应说shared_ptr写时复制(COW)很糟糕,并且TR!已将其从字符串库中删除。大多数关于 SO 的建议都说使用shared_ptr而不是常规指针。

该文档还讨论了std::unique()用于制作 COW 指针,但我没有找到任何示例。

是谈论拥有一个为您执行 COW 的智能指针还是关于让您的对象使用shared_ptr克隆对象的新指针然后修改克隆对象?

示例:食谱和配料

困惑是如何用奶油代替oatmeal配方中的“牛奶”而不影响mashed_potatoes配方。

我的算法是:

牛指针如何在这里发挥作用?

注意:我在 Windows NT、Vista 和 7 上使用 MS Visual Studio 2010。

0 投票
3 回答
848 浏览

python - deepcopy 是否使用写时复制?

我想知道在对可变对象进行深度复制时,python 解释器是否在写入策略上应用复制。

另外,我想知道深度复制是否也在非可变对象上执行(但这对我来说似乎很奇怪)

0 投票
2 回答
4853 浏览

c - 为什么子进程和父进程的变量地址相同

这是我的代码

程序的输出如下:

我的问题是为什么孩子和父母的变量地址相同但值不同?

0 投票
1 回答
326 浏览

c++ - return const auto object -- 和 Qt 隐式共享

所以众所周知,这段代码是不合理的:

因为无论如何复制时返回“const int”是什么意思?

但是对于像 Qt 容器这样具有隐式共享 (COW) 的类,这又有意义了吗?考虑:

现在我可以这样做:

由于Qt对容器有隐式共享,它应该可以正常工作,因为return lst它并没有真正复制列表的内容,只是增加引用计数,并const确保我不能修改它(如果get_list出于某种原因想要确保它,或者需要它是const方法本身)。我的想法在这里正确吗?

0 投票
4 回答
2660 浏览

python - Python 是否使用写时复制来复制列表?

假设我复制一个现有列表:

[一些编辑]

我听说当copyed_list 或existing_list 发生突变时,Python 使用写时复制。这是真的?

在我看来,这似乎是一个过于复杂的问题,需要在所有地方进行锁定(想想多线程)。

为了清楚起见:我不是在寻找 COW impl。我只是想了解什么是 Python 标准行为。

0 投票
5 回答
395 浏览

java - 如何从 Java 中的 CopyOnWriteArrayList 中获取底层静态数组?

我有一个类,它维护类的功能列表。与读取相比,这些特征很少改变。读取几乎总是通过特征列表进行迭代。因此,我使用的是CopyOnWriteArrayList.

我想要这样的功能:

我承认,原因可能是有点懒惰。我想写这样的代码:

而不是这个:

主要问题是 - 我在这里偷懒了吗?我将经常遵循这种模式,并且我认为第一段代码更容易维护。显然,我永远不会更改底层数组,我会将其放入文档中。

处理这种情况的正确方法是什么?

0 投票
2 回答
224 浏览

c++ - 函数调用参数中的表达式交错到什么粒度?

我想完全了解函数调用参数如何交错的具体规定。在我看来,这有很多含义。举个例子:

Sutter在cow_stringGotW 上描述的 Copy-On-Write 字符串容器在哪里:http ://www.gotw.ca/gotw/045.htm

  1. s1+="haha"如果对和的评估s2+="hahaha"以非常精细的粒度进行交错,这是否意味着这会在 cow_strings 内部引用计数上创建竞争条件(取决于编译器)?

  2. 如果我尝试使用互斥锁来防止竞争条件,那甚至不会导致单线程程序中的自锁(这让我很头疼)。例如,S1 制作内部副本并获取互斥体以减少引用计数上下文切换S2 也制作内部副本并运行到互斥体和 bam 自锁。

  3. (仅当第一个为真时)如果我的团队的其他成员不是专家或不知道它是牛,是否有安全的方法使一个对象成为牛?

编辑:

为清楚起见,Herb Sutters 的示例动摇了我对表达方式不是很交错的图片:

这样做:

或这个:

在这里阅读:http: //flylib.com/books/en/3.259.1.55/1/

第二次编辑:我想我假设一个引用计数器更改函数cow_string被内联,这是一个愚蠢的假设。没有那个愚蠢的假设,我的问题并没有多大意义。不过感谢您的回答!

0 投票
2 回答
4866 浏览

string - Go 语言是否对字符串使用 Copy-on-write

Go 语言是否像 Java 中那样对字符串使用 Copy-on-write?即,如果我按值将字符串传递给方法并且从不更改它将分配内存并复制字符串(这将是时间效率低下的),或者它只会引用单个副本。

0 投票
3 回答
94 浏览

php - 为什么代码会以这种方式运行 WRT 引用返回?

这是我的设置:
display_startup_errors = on
display_errors = On
error_reporting = E_ALL | E_STRICT

上面的代码输出如下通知:

严格标准:只有变量应该通过引用在 /path/to/file/file.php 中的“某些行号”行
$a= 11 $b= 10
a: (refcount=1, is_ref=0)=11

为什么上面的代码会显示通知?为什么会发生 COW(写入时复制)?

上面的代码将输出:

$a= 11 $b= 11
a: (refcount=1, is_ref=1)=11

为什么这里没有严格的标准通知?这里的参考作品。

上面的代码将输出:

$a= 11 $b= 10
a: (refcount=1, is_ref=0)=11

为什么一头牛在这里发生?

有关 xdebug_debug_zval 的信息,请访问此处

0 投票
3 回答
178 浏览

php - 有时我们在基于类的编码中在函数之前声明“&”

我正在关注基于类的项目开发编码。我最近看到有时我们将“&”放在函数名称之前。

举个例子。。

而不是定义

它被定义为

“&”有什么特殊含义吗?