constexpr array vs deque,内存利用率

constexpr array vs deque, memory utilization

我需要在我的代码中存储大约 30 个整数的预先知道的大小,我已经做到了

constexpr std::array<size_t, 30> MAPPING{1, 2, 3, ...};

如果我没记错的话,上面的内容会在编译时进行评估,但它也会占用一个大小为 30 个整数的连续内存块?

如果是,是否值得使用 std::deque 代替

const std::deque<int> MAPPING{1, 2, 3, ...};

这样,使用双端队列,我们​​就不会使用单个大的顺序内存块,它可能会使用一堆碎片块,因此即使内存碎片化也能正常工作?

如有遗漏请告知,谢谢

不值得在这里使用std::deque

它还会占用一个大小为 30 个整数的连续内存块吗?


是的,它将占用堆栈中大小为 30 个整数的单个连续内存块

这样,对于双端队列,我们​​不会使用单个大的顺序内存块,它可能会使用一堆碎片块,因此即使内存碎片化也能正常工作?


它是 implementation-dependent,对于 30 个整数,它们可能会被分成几个小块,也可能不会,但它会使用 heap 内存,因此有运行时开销:

As opposed to std::vector, the elements of a deque are not stored contiguously: typical implementations use a sequence of individually allocated fixed-size arrays, with additional bookkeeping, which means indexed access to deque must perform two pointers dereferences, compared to vector's indexed access which performs only one.

根据@Homer512的评论,我们在使用堆的时候也需要注意内存碎片,可能会造成内存浪费,无法避免。