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

Как распределяется память в стеке? - C++

Восстановить пароль Регистрация
 
Niaden
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 15
13.10.2012, 14:54     Как распределяется память в стеке? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using namespace std;
 
int main ()
{
    int iBu=3,iBu2=7,iBu3=-23,iBu4=-100;
    int* ptr, *ptr2, *ptr3=&iBu3,*ptr4=&iBu4;
    ptr=&iBu;
    ptr2=&iBu2;
    int **ptr_=&ptr2;
    cout<<endl<<"sizeof int="<<sizeof(int)<<" sizeof int *ptr ="<<sizeof(ptr);
    cout<<endl<<iBu<<"  "<<iBu2<<"  "<<iBu3<<"  "<<iBu4<<endl<<ptr<<"  "<<ptr2<<"  "<<ptr3<<"  "<<ptr4<<endl<<*ptr<<"  "<<*ptr2<<"  "<<*ptr3<<"  "<<*ptr4<<endl;
    cout<<endl<<ptr_<<"  "<<&ptr4<<"  "<<&ptr_<<endl;
    return 0;
}
вообщем, размер переменной инт в 32хразрядке 4 байта, что и показал sizeof.

Получаю следующий следующие адреса: 0012ff60 0012ff54 0012ff48 012ff3c
1245024 1245012 1245000 1244988

Почему разница 12, а не 4, как в примере книжки?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2012, 14:54     Как распределяется память в стеке?
Посмотрите здесь:

C++ Вопрос о стеке
C++ Структура в стеке
C++ Как происходит процесс выделения памяти в стеке и куче
C++ Как удалить последний символ строки(голову в стеке)
C++ Размещаются ли члены в стеке?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.10.2012, 15:01     Как распределяется память в стеке? #2
Цитата Сообщение от Niaden Посмотреть сообщение
Почему разница 12, а не 4, как в примере книжки?)
между чем и чем?
и ради бога, разделяйте пробелами операции и их операнды, ваше месиво не читаемо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main ()
{
    int iBu = 3, iBu2 = 7, iBu3 = -23, iBu4 = -100;
    int* ptr, *ptr2, *ptr3 = &iBu3, *ptr4 =&iBu4;
    ptr = &iBu;
    ptr2 = &iBu2;
    int **ptr_ = &ptr2;
    cout << endl << "sizeof int=" <<sizeof(int) <<" sizeof int *ptr =" <<sizeof(ptr);
    cout <<endl 
         <<iBu << "  " << iBu2 << "  " << iBu3 << "  " << iBu4 << endl
         << ptr << "  " << ptr2 << "  " << ptr3 << "  " << ptr4 << endl
         << *ptr << "  " << *ptr2 << "  " << *ptr3 << "  " << *ptr4 << endl;
    cout << endl << ptr_ << "  " << &ptr4 << "  " << &ptr_ << endl;
    return 0;
}
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
13.10.2012, 15:05     Как распределяется память в стеке? #3
Потому что компилятор расположит переменные в стеке в том порядке, в котором посчитает нужным. Порядок, в котором у тебя переменные описаны в программе, никакой роли не играет. На одном компиляторе он может быть одним, на другом - другим
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
13.10.2012, 16:25     Как распределяется память в стеке? #4
Потому что компилятор расположит переменные в стеке в том порядке, в котором посчитает нужным. Порядок, в котором у тебя переменные описаны в программе, никакой роли не играет. На одном компиляторе он может быть одним, на другом - другим
Но это не мешает некоторым институтским преподавателям рассматривать в своих курсах темы типа:
C++
1
2
3
4
int a = 2;
int b;
 
*(&a + 1) = a + 1; // записываем a + 1 в b
пользуясь Visual C++ :-)
Niaden
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 15
13.10.2012, 17:18  [ТС]     Как распределяется память в стеке? #5
спасибо за ответы)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
13.10.2012, 17:27     Как распределяется память в стеке? #6
Цитата Сообщение от Герц Посмотреть сообщение
пользуясь Visual C++ :-)
У нас на форуме тоже есть один похожий
Yandex
Объявления
13.10.2012, 17:27     Как распределяется память в стеке?
Ответ Создать тему
Опции темы

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