2010-11-09 7 views
1

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

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

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

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

+0

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

+0

Что вы подразумеваете под «и как доступ к отдельным битам моделируется ссылочным типом»? – Mat

+0

Чтобы процитировать стандарт: «* reference - это класс, который имитирует поведение ссылок одного бита в векторе *» - он используется в объявлении интерфейса std :: vector

ответ

1

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

НО

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

+0

Я знаю об этом и хотел бы знать о используемой памяти layout для бит – Mat

+0

Я не уверен, какая именно информация вам нужна, но массивы гарантированно будут непрерывным блоком памяти. Кроме этого, он по умолчанию использует правила заполнения для платформы. – Klaim

1

Вектор по существу является оберткой вокруг массива, поэтому да, память смежная. Это также означает, что вы можете использовать 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 

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

+0

, но 'vector ' использует отдельные биты для хранения логических значений, и я хотел бы знать о порядке этих бит – Mat

+0

. Да, это то, о чем я просил. поэтому, если в «vector » имеется 13 булевых элементов, они хранятся в виде 13 последовательных бит в памяти? – Mat

+0

да 13 последовательных битов (не байтов) – Marlon