Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
whhandrey
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 14
1

Разница байт между адресами переменных

26.03.2016, 20:15. Просмотров 512. Ответов 3
Метки нет (Все метки)

Добрый день, форумчане. Изучаю работу с памятью в С++ через указатели.
Я узнал, что существует стековая память, и сам стек организован по принципу первый пришел-последний ушел.
Решил вывести адреса переменных, созданных в стеке функции main.
Разница между переменными типа int составляет в 12 байт. Вычитаем 4 байта(размер int), получаем 8 байт.
С double та же ситуация - разница между переменными 16 байт. Вычитая размер double получаем снова 8 байт.

Откуда взялись лишние 8 байт? С чем это связано? Почему разница между переменными не равна размеру их типа?

Код, который тестировал

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
void main()
{
    double a, b, c, d;
 
    // Разница между адресами int в 12 байт. Почему?
    // double - 16
 
    // 12 - 4(int) = 8;
    // 16 - 8(double) = 8;
 
    cout << &a << endl;
    cout << &b << endl;
    cout << &c << endl;
    cout << &d << endl;
}
Подскажите, в каком направлении копать
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2016, 20:15
Ответы с готовыми решениями:

Разница между --f и f--
Не понимаю, читал, что разницы между --f и f-- вообще никакой нет, но при компиляции программы...

Разница между != и <=
Здравствуйте! Писал программу с использованием QuickSort и заинтересовала такая вещь: void...

Разница между 0 и 00 ?
Как заставить программу различать 0 и 00 (ноль и два ноля, как в рулетке)? Вариант с заменой 00...

Разница между if else и else if
Привет, у меня возник &quot;нубский&quot; вопрос. Этот код, это же соркащенная версия нижнего? int...

Разница между С и С++
Если не брать во внимание объекты и классы, то разница состоит только лишь в cin, cout и директивах?

3
hoggy
Эксперт С++
7643 / 3447 / 716
Регистрация: 15.11.2014
Сообщений: 7,871
Завершенные тесты: 1
26.03.2016, 20:56 2
судя по этому коду:


http://rextester.com/FRGF89411
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
 
void view_offset(const auto& b, const auto& a)
{
    cout << &b << " - " << &a << " = " << &b-&a << endl;
}
 
int main()
{
    double a, b, c, d;
 
    cout << "size = " << sizeof(a) << endl;
    view_offset(d,c);
    view_offset(c,b);
    view_offset(b,a);
}
size = 8
0x7fff46e60c98 - 0x7fff46e60c90 = 1
0x7fff46e60c90 - 0x7fff46e60c88 = 1
0x7fff46e60c88 - 0x7fff46e60c80 = 1
объекты стоят вплотную друг за другом.
в связи с этим не очевидно,
что именно вам не понятно.
1
nd2
3103 / 2597 / 1134
Регистрация: 29.01.2016
Сообщений: 8,690
26.03.2016, 21:13 3
В студии не так всё.

Добавлено через 2 минуты
Цитата Сообщение от whhandrey Посмотреть сообщение
Подскажите, в каком направлении копать
Выравнивание стека.
1
Someone007
3662 / 2682 / 1171
Регистрация: 09.05.2015
Сообщений: 6,587
Завершенные тесты: 1
26.03.2016, 21:28 4
Stack Allocation
The stack will always be maintained 16-byte aligned, except within the prolog (for example, after the return address is pushed), and except where indicated in Function Types for a certain class of frame functions.
1
26.03.2016, 21:28
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2016, 21:28

Различие между адресами
Какое главное различие между адресом сети и широковещательным адресом? По идеи, они посылают пакеты...

Карта на форме и расстояние между адресами
Доброго времени суток, делается дипломный проект &quot;Автоматизированная служба такси&quot;, всё почти...

Как посчитать объем памяти между адресами?
Всем привет! Помогите рассчитать сколько памяти находится между адресами 0A000:0000h и 0B800:0FFFFh...


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

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

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