Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2017, 22:24   #1
redfred
 
Регистрация: 06.10.2017
Сообщений: 4
По умолчанию Почему размер класса не равен нулю?

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

Код:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

#include <iostream>

class A {};    // Декларируем пустой класс.
A aaa;          // Создаем объект типа А.

int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << sizeof(A) << std::endl;        // Выдает размер - 8.
    std::cout << sizeof(aaa) << std::endl;     // Выдает размер - 8.

    getch();
    return 0;
}

Последний раз редактировалось Аватар; 06.10.2017 в 22:43.
redfred вне форума Ответить с цитированием
Старый 06.10.2017, 22:58   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Варавнивание и настройки компилятора. Например, гцц может спокойно выдать 1.
p51x вне форума Ответить с цитированием
Старый 06.10.2017, 23:08   #3
redfred
 
Регистрация: 06.10.2017
Сообщений: 4
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Варавнивание и настройки компилятора. Например, гцц может спокойно выдать 1.
Про выравнивание я помню. Даже вставив директиву препроцессора #pragma pack(1)
я получаю размер объекта равному одному байту. Но так и не могу понять почему его размер не может быть равным нулю ))
redfred вне форума Ответить с цитированием
Старый 06.10.2017, 23:18   #4
redfred
 
Регистрация: 06.10.2017
Сообщений: 4
По умолчанию

Попутный вопрос - возможно ли декларировать тип или создать какой-нибудь объект, размер которого (sizeof(...)) будет 0?
redfred вне форума Ответить с цитированием
Старый 06.10.2017, 23:20   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от redfred Посмотреть сообщение
размер которого (sizeof(...)) будет 0?
Нет.
Таковы требования языка.
waleri вне форума Ответить с цитированием
Старый 06.10.2017, 23:25   #6
redfred
 
Регистрация: 06.10.2017
Сообщений: 4
По умолчанию

Спасибо за ответы. Вопрос закрыт. Сознание начинает приходить в порядок ))
redfred вне форума Ответить с цитированием
Старый 07.10.2017, 08:16   #7
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Таковы требования языка.
И они имеют вполне разумное объяснение - разработчики языка хотели, чтобы два принципиально разных объекта не могли получить одинаковый адрес
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать текстовый файл с целыми числами, никакой из компонентов файла не равен нулю / Pascal ABC Barsisback Помощь студентам 0 13.06.2014 01:27
MinGW - почему такой большой размер файла? frommars Qt и кроссплатформенное программирование С/С++ 5 18.10.2012 16:08
Почему значения ординат в гарфике равны нулю?? Tolias Microsoft Office Excel 4 10.10.2011 22:20
Почему результат цикла равен нулю? Alkagolik Помощь студентам 2 11.03.2011 14:45