Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

std::vector and std::list memory layout

We know that std::vector gives a continuous memory layout, while std::list gives a linked memory layout, and my question is what is the memory layout of std::vector< std::list >? Does it contain contents of std::list or it just contains several pointers to the lists?

like image 344
JavaBeta Avatar asked Apr 26 '26 14:04

JavaBeta


2 Answers

Although it is true that std::list keeps its elements in separately allocated memory locations connected with each other as a linked list, a small area of memory is needed for the header structure of the list itself. It is this structure that gets allocated when you create an instance of std::list<T>.

A vector of std::list<T> consists of these "header" items for the individual linked lists, allocated in a contiguous region of memory:

Vector of Lists

like image 156
Sergey Kalinichenko Avatar answered Apr 29 '26 03:04

Sergey Kalinichenko


It's the same as any other std::vector<T> (unless T=bool): it contains an array of T. In this case, it is an array of std::list. A std::list object is basically a bookkeeping structure for the list of objects it "contains"; the actual elements are in separately-allocated chunks outside of this structure (and therefore outside the memory block managed by std::vector<std::list<T> >).

Note that std::vector doesn't care what T is as long as it is copyable. In principle, you could design a container that had specializations for carrying other containers, but this isn't how std::vector works.

like image 31
nneonneo Avatar answered Apr 29 '26 03:04

nneonneo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!