gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:26:15 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com