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

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

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

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

13.10.2012, 14:54. Просмотров 329. Ответов 5
Метки нет (Все метки)

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, как в примере книжки?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2012, 14:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как распределяется память в стеке? (C++):

Как выделяется память на стеке и на куче? Когда нужна ручная очистка? - C++
Всем здрасьте. //1 char s = 's'; //2 char* ss = new char; Во втором случае компилятор выделяет участок памяти, потом мне же её...

Как реализовать поиск значения,которое находится в стеке? - C++
нужно найти значение.Значение находится в стеке.Как реализовать поиск? Пробовал через массив сделать что-то не получается вот код ...

Как удалить последний символ строки(голову в стеке) - C++
struct List { int x; List *Next,*Head;} ; void Add (int x, List **MyList) {

Как происходит процесс выделения памяти в стеке и куче - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &quot;disc.h&quot; void main() { SetConsoleCP(1251); ...

Что из себя представляет код в стеке, и как его использовать - C++
Гугл мне по этому поводу не помог, поэтому спрашиваю тут: что из себя представляет из себя код в стеке, как его использовать(вызвать там и...

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? - C++
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в самом языке С++ ? 2. В какой памяти он хранится и почему...

5
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 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;
}
0
Evg
Эксперт CАвтор FAQ
17935 / 6163 / 409
Регистрация: 30.03.2009
Сообщений: 16,921
Записей в блоге: 27
13.10.2012, 15:05 #3
Потому что компилятор расположит переменные в стеке в том порядке, в котором посчитает нужным. Порядок, в котором у тебя переменные описаны в программе, никакой роли не играет. На одном компиляторе он может быть одним, на другом - другим
0
Герц
524 / 341 / 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++ :-)
0
Niaden
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 15
13.10.2012, 17:18  [ТС] #5
спасибо за ответы)
0
Evg
Эксперт CАвтор FAQ
17935 / 6163 / 409
Регистрация: 30.03.2009
Сообщений: 16,921
Записей в блоге: 27
13.10.2012, 17:27 #6
Цитата Сообщение от Герц Посмотреть сообщение
пользуясь Visual C++ :-)
У нас на форуме тоже есть один похожий
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2012, 17:27
Привет! Вот еще темы с ответами:

Структура в стеке - C++
Я наверное уже всех задолбал со своим стеком, но всё же мне еще нужна помощь)) Код, который ниже должен запрашивать у пользователя ввод...

Вопрос о стеке в С++ - C++
Всем привет!! У меня тут вопрос про стек. Цитата из книги: Вектор здесь статический, может хранить только элементы типа int....

Ошибка в стеке! - C++
template&lt;typename T&gt; class Stack { private: struct Stek { T key; Stek* next; };

Вопрос о стеке - C++
На сколько я знаю, подпрограмма которая выполняется рекурсивно, кидает в стек копию своих параметров, и так пока стек не переполнится... ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
13.10.2012, 17:27
Ответ Создать тему
Опции темы

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