Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Размещение объектов в памяти  (Прочитано 793 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Boriska
Помогающий

us
Offline Offline

« : 14-07-2024 18:02 » 

Привет форумчане.
Вроде знаю что объекты должны располагаться один за одним, но вижу иное, с гапом.

Код: (C++)
#include <iostream>
class Mom {
public:
    int s = 0;
};

class Dad {
public:
    int s = 1;
};

class Grand {
public:
    int s = 5;
};

class Son : public Mom, Dad, Grand{
public:
    int s = 2;
};

int main()
{
    Mom mom;
    Dad dad;
    Grand grand;
    Son son;

    std::cout << "Hello World!\n Mom s = "<<mom.s << " Dad = " << dad.s << " Son = " << son.s;
    std::cout << "\n";
   
    std::cout << "Mom = " << sizeof(mom) << "\n";
    std::cout << "Dad = " << sizeof(dad) << "\n";
    std::cout << "Grand = " << sizeof(grand) << "\n";
    std::cout << "Son = " << sizeof(son) << "\n";

    std::cout << "Mom = " << &mom << "\n";
    std::cout << "Dad = " << &dad << "\n";// << (&dad) - (&mom);
    std::cout << "Grand = " << &grand << "\n";
    std::cout << "Son = " << &son << "\n";


}
« Последнее редактирование: 14-07-2024 18:04 от Boriska » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 15-07-2024 05:05 » new

Boriska, только в массиве есть такая гарантия.
А на стеке компилятор как угодно может разложить.
Даже между полями класса по стандарту такой гарантии нет (хотя, обычно компиляторы располагают в том порядке, как программист нарисовал)

более того, во время оптимизации объект на стеке и вовсе может перестать физически существовать, компилятор может его заменить какой-нибудь константой или вообще пустотой, если сумел вычислить в компалтайме
« Последнее редактирование: 15-07-2024 05:07 от Алексей++ » Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines