0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 56
1

Сколько выделится памяти под битовое поле?

24.08.2018, 21:38. Показов 1101. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Разбираю одну програмку, а именно реализацию телефонной базы данных.
Может кто-нибудь объяснить что такое битовое поле и как выделяется память и как она будет занята
вот код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    char *Fio;                      //ФИО абонента
    char Telefon[20];               //Телефон абонента
    float Balans;                   //текущий баланс абонента
    int Count;                      //количество звонков абонента
    bool Tarif_Plan;                //выбран ли тарифный план
    union {
            struct{
                enum { Tarif100,Tarif200,Tarif300}Tarif;    //тарифные планы
                int Minut;                                  //остаток минут в тарифе
                float Plata;                                //цена за телефонный звонок по тарифу после окончания минут
            }Tarif_Opt;                                     //Структура параметров тарифного плана
            struct{
                float Plata;                                //плата за телефонный звонок по стандартному тарифу
            }Standart;                                      //структура стандартного тарифного плана
    };
    unsigned short Status :1;                               //статус абонента 1-активный 0-неактивный
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2018, 21:38
Ответы с готовыми решениями:

Как хранится битовое поле в памяти компьютера?
Хотелось бы наглядно ознакомиться как выглядит битовое поле в памяти компьютера. Я думаю проще...

Интересное задание (Сколько ячеек памяти выделится под переменные?)
Дан такой код: class A { private:a; protected:b; public:c; }; class B: public A {

Объясните пожалуйста откуда в памяти отведенной под битовое поле появилось данное значение
У меня есть структура : struct str10 { short : 10; char c; long : 12; short b : 8;...

Битовое поле
Здравствуйте! Подскажите, как и что делать с 0x14B5C731+13*9641 and 0xFFFFFFFF. Какое значение...

11
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,862
25.08.2018, 10:07 2
битовое поле это "переменная", размер которой задается не в байтах, а в битах. Проблема в том, что для скорости работы компилятор обычно выравнивает переменные по машинным словам. Плюс размер любой структуры должен быть кратен как минимум байту, лучше - слову. Например
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct S1{
  char a:1;
}; //1 байт
 
struct S2{
  char a:1;
  char b:1;
}; //1 байт
 
struct S3{
  char a:1;
  char b;
  char c:1;
}; //3 байта, поскольку выравнивание b идет по 1 байту
Но это зависит от настроек компилятора. Выставить максимальную плотность упаковки можно так:
C
1
2
3
4
5
6
#pragma pack(push)
#pragma pack(1)  
struct __attribute__((__packed__))S{
...
};
#pragma pack(pop)
0
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 56
25.08.2018, 12:17  [ТС] 3
COKPOWEHEU, а в моем случает выделится тоже 1 байт? и только 0 будет занят?
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,862
25.08.2018, 15:02 4
под Status да, 1 байт, в котором будет использован только младший бит
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,512
25.08.2018, 17:02 5
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
под Status да, 1 байт
однако тип то short
Цитата Сообщение от petrucho12312 Посмотреть сообщение
unsigned short Status :1;
0
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 56
25.08.2018, 17:07  [ТС] 6
ValeryS, значит сколько?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,512
25.08.2018, 17:19 7
Цитата Сообщение от petrucho12312 Посмотреть сообщение
значит сколько?
не знаю
short в зависимости от реализации может занимать несколько от одного до нескольких байт
проверь так sizeof(short)
а ты зачем байты вылавливаешь?
0
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 56
25.08.2018, 17:36  [ТС] 8
ValeryS, хочу разобраться в этом
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,512
25.08.2018, 19:11 9
petrucho12312, есть такая штука, как выравнивание
например 32разрядным петиумам удобней работать с памятью кратной 4 байтам
и если будешь жать, убирая выравнивания,тол потеряешь в производительности
например char a;
скорее всего в памяти будет выглядеть XXXa, где X неиспользуемые байты
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
26.08.2018, 13:00 10
COKPOWEHEU,
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
struct S3{
* char a:1;
* char b;
* char c:1;
}; //3 байта, поскольку выравнивание b идет по 1 байту
Запутался немного. Выравнивание b по 1 байту. А 2 байта почему добавились?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
26.08.2018, 15:23 11
На всякий случай: Чтение битового поля
1
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,862
27.08.2018, 19:22 12
Цитата Сообщение от Peoples Посмотреть сообщение
Запутался немного. Выравнивание b по 1 байту. А 2 байта почему добавились?
один под поле a, второй - под поле c. Переменная b занимает 1 байт и выравнивается по началу, а не впритык к другим полям.
1
27.08.2018, 19:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.08.2018, 19:22
Помогаю со студенческими работами здесь

Сколько энергии выделится при сжигании газа?
При сгорании природного газа объемом 1 м3, находящегося при нормальных условиях, выделяется...

Заполнить битовое поле с клавиатуры
Здравствуйте! При вводе значения для подстановки в структуру битового поля возникает...

Определите, какое количество теплоты Q выделится в кольце при его повороте в поле на угол ф=90
Доброе вечер..друзья помогите сделать задачу..а то вообще край..буду признателен Кольцо с...

Создать битовое поле для хранения времени
Начали изучать битовые числа, запутался, не могу понять что и как должно реализовывать и как вообще...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru