【发布时间】:2019-03-03 13:31:47
【问题描述】:
我在堆栈中分配了std::variant 类型的std::vector。由于每个变体的大小都是可变的。我想知道向量的内存布局在堆栈中是什么。
【问题讨论】:
-
由于每个变体的大小都是可变的。 这是错误的。变体将与其最大类型一样大或更大。
-
对象的大小是恒定的。
T类型的对象将在编译时确定一定的大小,T的所有实例将具有完全相同的大小。如果一个对象似乎改变了大小,它并没有改变,而是额外的数据存储在其他地方动态分配的内存中,而不是大小的一部分。 -
Also ...vector is in stack..."栈上的vector只是一个指针和一个大小(或2个指针)。vector中包含的数据在堆上。
-
变体的大小不会改变。变体大到足以容纳任何变体类型。但是变体的值表示的大小可以改变。不参与值表示的额外位称为填充位。变量向量可能会填充很多填充位。向量的变体将具有更少的填充位。
标签: c++ memory-layout std-variant