8得票2回答
释放未更改的“写时复制”内存

我理解写时复制的概念。当我进行fork时,堆被标记为CoW(写时复制),当任何进程尝试更改它时,都会创建一个副本。问题是:在子进程中是否仍然需要释放它?假设父进程有一个动态char *数组,然后进行fork。子进程打印一些const char并退出。子进程根本没有修改堆。这样会造成内存泄漏吗?...

8得票2回答
共享内存和写时复制,或者右值引用和移动语义?

通用容器(如Qt中的容器)的共享内存/写时复制实现是否被C++11的移动语义和右值引用所取代? 它们各自的优缺点是什么?还是说它们相辅相成而非互斥?

8得票6回答
如何确定写时复制页面是否是实际的副本?

当我使用mmap创建一个写时复制映射(MAP_PRIVATE)时,只要我写入特定地址,这个映射的一些页面就会被复制。在程序的某个点上,我想知道哪些页面实际上已经被复制了。有一个叫做“mincore”的调用,但它只报告页面是否在内存中,而不是页面是否已经被复制。有没有办法找出哪些页面已经被复制了?

8得票1回答
在Swift中哪些值类型支持写时复制?

我在这里阅读了有关Swift中数组的写时复制实现的内容(链接)。 所有变量大小的集合(包括标准库中的数组)都使用写时复制优化。多个数组副本共享相同的存储,直到修改其中一个副本。当发生这种情况时,被修改的数组将其存储替换为一个唯一拥有的自身副本,并在原地进行修改。有时会应用优化来减少复制的数...

8得票3回答
为什么没有boost :: copy_on_write_ptr?

我刚刚看到了这个不错的写时复制指针实现。它看起来非常通用和有用,所以我的问题是:在任何C++工具包(boost、loki等)中是否包含这样的类?如果没有,我真的很想知道为什么,因为这是一个非常有用的习语,显然一个通用的实现似乎是可行的(就像我链接到的那个实现)。

7得票1回答
更高效地使用fork()和写时复制内存共享

我是一名开发多人在线游戏的程序员,使用基于Linux的服务器。我们为世界使用“实例化”架构。这意味着进入某个世界区域的每个玩家都会得到该区域的副本与其队友一起玩,并独立于所有其他玩家在同一区域中玩耍。 在内部,我们为每个实例使用一个单独的进程。最初,每个实例进程将启动,仅加载所需的资源,生成...

7得票2回答
通过const引用传递Qt类

众所周知,Qt类在按值传递时使用copy-on-write。因此,只有在需要时才进行复制。我曾多次看到人们在仅需要只读访问对象时通过const引用传递Qt类。如果在这两种情况下都不进行复制,为什么人们会传递const QString&而不是简单的QString呢?