获取std :: array的底层数组的内存大小的最简单方法是什么?

NPS*_*NPS 5 c++ sizeof stdarray

这是获取std::array::data()返回内容大小的最简单/最短的方法吗?

arr.size() * sizeof(arr.value_type)
Run Code Online (Sandbox Code Playgroud)

编辑:我的问题不准确."内存中的大小"是指数组中包含的所有元素(本身)的大小,因此,如果它们是指向结构的指针,我只需要指针的大小,而不是指向的结构.我也不想包含实现的任何可能开销的大小std::arr.只是数组元素.

有人建议sizeof(arr).这个:stof :: array <char,N>的sizeof是多少?乞求不同意.虽然它似乎在我的机器上工作,但我想知道标准保证什么.

Vit*_*meo 5

您可以sizeof直接在您的std::array实例上使用运算符:

sizeof(arr)
Run Code Online (Sandbox Code Playgroud)

例:

struct foo
{
    int a;
    char b;
};

int main()
{
    std::array<foo, 10> a;
    static_assert(sizeof(foo) == 8);
    static_assert(sizeof(a) == 80);
}
Run Code Online (Sandbox Code Playgroud)

wandbox上的实例


cppreference:

std::array 是一个封装固定大小数组的容器.

此容器是一种聚合类型,其语义与struct将C样式数组T[N]作为唯一的非静态数据成员相同.

  • 是否保证`sizeof(struct {T t [N];})== N*sizeof(T)`?(尤其是`sizeof(std :: array <char,3>)== 3`?) (3认同)

NPS*_*NPS 2

由于没有人发布过比我的第一个猜测更好的内容,并且sizeof(arr)很可能不能保证不包含任何可能的附加字段的大小,std::array's因此我选择它作为接受的答案。

arr.size() * sizeof(arr.value_type)
Run Code Online (Sandbox Code Playgroud)

如果有人想出更好的办法,我很乐意接受他们的答案。