arrays - 数组变量共享多少信息?

标签 arrays variable-assignment d sharing deep-copy

当我将一个数组变量分配给另一个数组变量时,复制/共享了多少信息?

int[] a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
int[] b = a;
a[0] = 42;
writefln("%s %s", a[0], b[0]);   // 42 42

显然,ab共享相同的有效负载,因为 42 被打印两次。
a ~= 10;
writefln("%s %s", a.length, b.length);   // 11 10

附加到 a不变b ,所以长度似乎不是有效载荷的一部分?
b = a;
a ~= 11;
b ~= 42;
writefln("%s %s", a[11], b[11]);   // 11 42

符合标准的 D 实现是否也可以打印 42 42 ?可以b ~= 42覆盖里面的 11 a ?

确切时间是ab彼此分离? D 在后台表演一些 COW 吗?

最佳答案

D 中的“数组”实际上并不存在。

Slices do.

切片只是一个指针和一个长度。因此,当您将它们相互分配时,指针和长度会被复制。如果您修改目标数据,那么它将在切片的所有实例中都可见——但是如果您放大一个切片,另一个切片仍将使用其旧长度。

您通常无法“缩小”内存中数组的实际长度(尽管您当然可以减少切片的长度,因此它“看到”的数据更少),因此不会引起问题。

希望这能解释发生了什么。

关于arrays - 数组变量共享多少信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8790978/

相关文章:

c++ - std::map operator[] 并自动创建新对象

c++ - C++ 中奇怪的多重赋值错误

unit-testing - 有哪些可用于 D 的模拟对象库?

python - Python中出现太多索引错误

javascript - 仅通过带有 underscore.js 的某些字段在对象数组之间进行交集和等于

c++ - C++中的二维步长数组

c++ - 使用 -1 作为无符号 (size_t) 类型的标志值

arrays - 如何通过标签匹配和组匹配对该数组进行最佳排序?

c - 将 char 赋值给 char - 意外行为

d - 在构造函数之外初始化 const 对象