std.variant 对大型类型的行为
Behavior of std.variant with large types
根据 docs:
You may want to use VariantN directly with a different maximum size [from Variant] either for storing larger types, or for saving memory.
我假设这意味着 Variant
不会接受大型结构,但以下通过:
struct S {
long[2048] vals;
}
static assert(Variant.allowed!S);
那么,当我在标准 Variant
中粘贴像 S
这样的大字体时,究竟会发生什么?
S
会自动装箱吗?
请注意 allowed
只检查类型列表,不检查大小。
但是对于一个大东西,它会被复制到堆中:variant.d 的源代码第 627 行显示了它。如果尺寸适合商店,它就存储在这里。否则,将创建堆副本并存储指向该副本的指针。
所以是的,它基本上是根据需要装箱的。
根据 docs:
You may want to use VariantN directly with a different maximum size [from Variant] either for storing larger types, or for saving memory.
我假设这意味着 Variant
不会接受大型结构,但以下通过:
struct S {
long[2048] vals;
}
static assert(Variant.allowed!S);
那么,当我在标准 Variant
中粘贴像 S
这样的大字体时,究竟会发生什么?
S
会自动装箱吗?
请注意 allowed
只检查类型列表,不检查大小。
但是对于一个大东西,它会被复制到堆中:variant.d 的源代码第 627 行显示了它。如果尺寸适合商店,它就存储在这里。否则,将创建堆副本并存储指向该副本的指针。
所以是的,它基本上是根据需要装箱的。