макет памяти вектора <bool> - PullRequest
       9

макет памяти вектора <bool>

1 голос
/ 10 ноября 2010

Может ли кто-нибудь объяснить структуру памяти данных, хранящихся в vector<bool>?

, например, какую схему имеет память от адреса &myVec[0] и выше?Зависит ли это от порядка байтов?Является ли память постоянной для всех сохраненных значений?(Я знаю, что vector<bool> на самом деле не хранит логические значения).Могу ли я сбросить содержимое vector<bool> в файл, используя memcopy, чтобы получить растровое изображение моих значений?

, пожалуйста, не задавайте вопросов, таких как «зачем вам это нужно» или предложений, таких как использование наборов битов или повышение.

Спасибо за точное объяснение

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

Вектор по сути является оберткой вокруг массива, так что да, память непрерывна.Это также означает, что вы можете использовать memcpy на нем (если это то, что вы хотите).

Порядковый порядок каждого элемента зависит от вашей текущей архитектуры.

vector<bool> myvector;
myvector.push_back(1);
myvector.push_back(0);
myvector.push_back(0);
myvector.push_back(1);
myvector.push_back(0);
myvector.push_back(1);
myvector.push_back(1);
myvector.push_back(0);

будет выглядеть так в памяти:

1 0 0 1 0 1 1 0

Я не уверен, что это то, что вы спрашиваете.

1 голос
/ 10 ноября 2010

Std :: vector будет просто управлять необработанным массивом в куче. Итак, когда вы делаете & myVec [0], вы получаете адрес первого элемента этого массива. Поскольку это массив, он ... следует правилам необработанного массива ..

НО

std :: vector - это особый случай, конкретная реализация, ошибка комитета C ++, который НЕ является вектором bool, а является контейнером, управляющим битами. Поэтому избегайте использования этого.

...