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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DEVU
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 9
#1

Как sizeof считает размер? - C++

16.05.2012, 23:44. Просмотров 969. Ответов 4
Метки нет (Все метки)

Есть код программы. Скажите как определить размерность структуры? Дело в том что выдает 4 байта, но хотелось бы узнать как это делает программа по шагам? то есть откуда в принципе эти 4 байта берутся, которые sizeof выводит?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
 
class ImplClass //ГЎГ*çîâûé ГЄГ«Г*Г±Г±
{
public:
   void do_work_1()
   {
      std::cout << "Doing some work 1" << std::endl;
   }
   
   virtual void do_work_2()
   {
      std::cout << "Doing some work 2 in base implementation class" << std::endl;
   }
};
 
class Derived : protected ImplClass // protected inheritance should be used as implementation
{
protected:
   virtual void do_work_2() // ïåðåîïðåäåëåГ*ГЁГҐ ГЎГ*çîâîãî ГЄГ«Г*Г±Г±Г*
   {
      std::cout << "Doing some other work 2 in derived class" << std::endl;
   }
public:
   void perform_operation()
   {
      // calling some implementation methods.
      // Usually, this is achieved using PImpl idiom (except some moments), but here we have a directive
      do_work_1(); // calling method of base class, which is protected for us.
      do_work_2();
      
      // Doing some important work with added class members.
      state_ = 42;
   }
   
private:
   int state_;
};
 
struct DerivedStruct : protected ImplClass
{
// public - îïðåäåëåГ*ГЁГҐ Г*ГҐ Г*ГіГ¦Г*Г®. 
   void perform_operation()
   {
      do_work_1();
      do_work_2(); // not overriden here
   }
};
 
 
int main(int /*argc*/, char ** /*argv*/)
{
  /* Derived d;
   d.perform_operation();
      DerivedStruct ds;
   ds.perform_operation(); */
   
   
   std::cout << "sizeof(Widget)" << sizeof(DerivedStruct) << std::endl; //4
   system("Pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2012, 23:44     Как sizeof считает размер?
Посмотрите здесь:

Sizeof: как правильно найти размер авторского типа? - C++
#include &lt;stdio.h&gt; using namespace std; class kl { }; ///////////////////////////////////////

Как использовать sizeof? - C++
1. Создать массив; 2. Инициализировать массив, используя пользовательский ввод; 3. Просуммировать все элементы массива, результат...

как вставить sizeof и зачем ? - C++
#include &lt;iostream&gt; using namespace std; void Bits(int p, int n, unsigned long &amp;x) { for(int i = 0, j = p; i &lt; n; i++,...

Объясните, как работает sizeof() и зачем она в этой программе - C++
Напишите программу, которая, используя только унарные, бинарные операторы и sizeof() выводит, введѐнную пользователем переменную, логически...

как зациклить switch, чтобы после того как я допустим ввожу f и он считает циклом for, потом снова просил введите символ - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; using namespace std; int main() { float x=0.2,y,s=0; int...

Sizeof - C++
int a = { 1, 2, 3, 4 },n = sizeof(a) / sizeof(a); Битый час разбираюсь с этой строкой,но понять не могу. Мы делим массив &quot;a&quot; на...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
17.05.2012, 00:02     Как sizeof считает размер? #2
Все переменные содержащиеся в структуре. Конкретно в данном случае у вас структура наследуется от класса ImplClass, который содержит всего одно поле int ( int state_ ) вот это поле и занимает как раз 4 байта, а функции не учитываются при подсчёте размера, т.к. являются разделяемым ресурсом и являются членами классов только на уровне исходного кода, ну это я так считаю
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
17.05.2012, 00:08     Как sizeof считает размер? #3
как хранится в памяти структуры!

немного теории!

Расставим точки над структурами C/C++
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.05.2012, 11:12     Как sizeof считает размер? #4
Цитата Сообщение от Buckstabue Посмотреть сообщение
ImplClass, который содержит всего одно поле int
Это Derived содержит одно поле типа int. ImplClass же содержит виртуальную функцию, а значит и его объекты, и объекты классов, наследующих ImplClass, нужен один неявный дополнительный указатель, содержащий адрес таблицы виртуальных функций для данного класса. Вот он-то и занимает пресловутые 4 байта. Чтобы убедиться в этом, достаточно убрать ключевое слово virtual у метода do_work_2 класса ImplClass, после чего размер будет 1 байт, а не 4 (так и должно быть для пустой структуры).
А по теме - sizeof ничего в сущности не считает, в конечном итоге это константа времени компиляции, поскольку компилятор знает (или может посчитать) размеры всех использующихся типов данных и их комбинаций.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2012, 20:56     Как sizeof считает размер?
Еще ссылки по теме:

sizeof() - C++
Ребята,объясните пожалуйста для чего нужен sizeof()?А то в книге очень заумно написано...

sizeof массива - C++
void f(float x) { printf(&quot;%d\n&quot;,sizeof(x)); // Пишет 4 байта (размер элемента массива) } void f2(float x) {...

Немного о sizeof - C++
Не могу найти. Вот такая форма оператора, с несколькими параметрами: sizeof (323, 43241, 555) Что она возвращает?

Sizeof выражение - C++
Почему при запуске, консоль сразу же закрывается: #include &lt;iostream&gt; int main() { float x = 1; cout &lt;&lt; &quot;sizeof (float): &quot;...

Sizeof глючит ? - C++
простой пример на вижуал с++2013: #include &lt;iostream&gt; using namespace std; struct MyStruct { short gg; int tt; //int...

Operator sizeof - C++
Кто-нибудь знает как реализован этот оператор? И когда он выполняется: на уровне компиляции или во время исполнения?


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

Или воспользуйтесь поиском по форуму:
DEVU
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 9
17.05.2012, 20:56  [ТС]     Как sizeof считает размер? #5
ребята, я закомментировала строчки, где всё связано с int и переменной стэйт и всё равно мне выводит 4 байта. так а как это объясняется?

Добавлено через 2 минуты
ой нет, всё правильно!!!!!! я убрала виртуал и получился 1 байт.
Yandex
Объявления
17.05.2012, 20:56     Как sizeof считает размер?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru