Форум программистов, компьютерный форум CyberForum.ru

Карта на основе битового поля - C++

Восстановить пароль Регистрация
 
taimag
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 31
12.08.2013, 03:24     Карта на основе битового поля #1
Здравствуйте. Реализую собственный алокатор памяти. Мне нужно знать где свободная память, а где нет. Для этого хочу использовать битовые поля. Суть идеи:
Минимально выделяемая память - 1 бАЙт. = в карте будет отображаться одним бИтом.
Следовательно для отображения 512 бАЙт мне нужно 64 бАЙта для карты. То есть карта занимает в 8 раз меньше места чем сама память. Вся память у меня уже нормально работает, нужна только карта для нее.

Вопрос. Как мне организовать такую карту? Я думал:

C++
1
2
3
4
5
const unsigned int memorySize = 512;
 
struct {
  unsigned m: memorySize;
} map;
Но как мне тогда вывести все 0 и 1 где память занята, а где нет, как мне перемещаться по массиву 0 и 1? И вообще можно ли так сделать?

Добавлено через 31 минуту
В общем пришел к мысли что сделаю так:

C++
1
2
3
4
5
6
const unsigned int memorySize = 512;
const unsigned int chunks = memorySize % sizeof(unsigned char) == 0? memorySize/8 : (memorySize/8)+1;
 
struct {
  unsigned char m[::chunks];
} map;
И уже буду разбирать на биты ячейку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2013, 03:24     Карта на основе битового поля
Посмотрите здесь:

Переписать код без использования операций сдвига и "битового and" C++
интерактивная карта города C++
Случайная карта из колоды C++
Для битового массива C++
Вывести данные из файла, заданные в виде битового поля C++
Атомарна ли операция битового сдвига? C++
Карта C++
C++ Реализовать функции для проверки битового представления типа данных

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
12.08.2013, 04:22     Карта на основе битового поля #2
Цитата Сообщение от taimag Посмотреть сообщение
sizeof(unsigned char)
1 по стандарту - можно не извращаться

здесь важнее другая величина
C
1
2
3
const unsigned bytes_in_chunk = 8;
m[n / bytes_in_chunk] |= (1 << (n % bytes_in_chunk)); // аллоцирование
m[n / bytes_in_chunk] &= ~(1 << (n % bytes_in_chunk)); // деаллоцирование
Добавлено через 3 минуты
http://en.wikipedia.org/wiki/Bit_manipulation
Yandex
Объявления
12.08.2013, 04:22     Карта на основе битового поля
Ответ Создать тему
Опции темы

Текущее время: 16:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru