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

sizeof для класса - C++

Восстановить пароль Регистрация
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
21.08.2013, 08:49     sizeof для класса #1
Создаем класс в котором только одна переменная типа int

C++
1
2
3
4
5
class MyClass
{
private:
    int n;
};
sizeof(MyClass) для этого класса печатает 4, т.к. int занимает в памяти 4 байта

C++
1
2
3
4
int main()
{
    std::cout << sizeof(MyClass);       // 4
}

---------------------------------------------------------------------

Теперь в класс добавим конструктор, деструктор и несколько функций

C++
1
2
3
4
5
6
7
8
9
10
11
12
class MyClass
{
public:
    MyClass(int i)      { n = 1; }
    ~MyClass()          {}
 
    void Set(int i)     { n = i; }
    int Get()           { return n; }
 
private:
    int n;
};
sizeof(MyClass) опять печатает 4:

C++
1
2
3
4
int main()
{
    std::cout << sizeof(MyClass);       // 4
}
Вот тут мне как раз и непонятно, почему результат sizeof(MyClass) один и тот же?
Ведь функции тоже занимают место в памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,872
Записей в блоге: 2
Завершенные тесты: 1
21.08.2013, 08:53     sizeof для класса #2
Цитата Сообщение от BigLow Посмотреть сообщение
почему результат sizeof(MyClass) один и тот же?
Потому что ничего не поменялось. Как требовалось для объекта 4 байта, так и осталось.
Цитата Сообщение от BigLow Посмотреть сообщение
Ведь функции тоже занимают место в памяти
То есть по Вашему они должны увеличивать размер объектов?
С чего вдруг, это же просто функции?
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
21.08.2013, 09:00  [ТС]     sizeof для класса #3
Цитата Сообщение от Croessmah Посмотреть сообщение
То есть по Вашему они должны увеличивать размер объектов?
думаю, должны.

Цитата Сообщение от Croessmah Посмотреть сообщение
С чего вдруг, это же просто функции?
А где записаны в памяти? Все эти функции находятся внутри класса. Еще в этих функциях есть локальные переменные. Они уж точно где-то записаны и занимаю место

Непонятно
eXtream
24 / 24 / 0
Регистрация: 10.03.2010
Сообщений: 161
21.08.2013, 09:21     sizeof для класса #4
На сколько я помню, таблица адресов функций-членов находиться в другом месте, и при создании объекта под них кажды раз не распределяеться память и это логично.

Добавлено через 3 минуты
А sizeof возвращает размер области данных
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
21.08.2013, 09:28  [ТС]     sizeof для класса #5
eXtream, спасибо
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
21.08.2013, 10:21     sizeof для класса #6
А еще же таблица виртуальных функций есть.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class One {
 public:
  One() {}
  int getX() const { return x; }
 private:
  int x;
};
 
class AnotherOne {
 public:
  AnotherOne() {}
  virtual int getX() const { return x; }
 private:
  int x;
};
 
int main(int, char**) {
  std::cout << "One weight " << sizeof(One) << " bytes, but "
    "AnotherOne is " << sizeof(AnotherOne) << " bytes." << std::endl; 
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
21.08.2013, 11:37     sizeof для класса #7
Цитата Сообщение от BigLow Посмотреть сообщение
думаю, должны.
Т.е. по твоему логично, что для каждого объекта существует своя копия функции? Т.е. если мы имеем массив из 1000 объектов, то в исполняемом файле будет существовать 1000 копий одной и той же функции? Конечно же нет, функции вынесены в отдельное место и по сути являются обычными функциями (как любая другая), отличие их в том, что область видимости у них ограничена классом (т.е. могут вызываться либо из другой функции класса, либо для объекта класса).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2013, 12:25     sizeof для класса
Еще ссылки по теме:

sizeof( char * ) & sizeof(char) C++
C++ delete внутри класса для самого класса
sizeof() C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.08.2013, 12:25     sizeof для класса #8
Цитата Сообщение от BigLow Посмотреть сообщение
Ведь функции тоже занимают место в памяти
В памяти, но не в объекте.
Yandex
Объявления
21.08.2013, 12:25     sizeof для класса
Ответ Создать тему
Опции темы

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