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

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

Войти
Регистрация
Восстановить пароль
 
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
#1

Эффективный адрес переменной - C++

09.03.2011, 14:14. Просмотров 1007. Ответов 7
Метки нет (Все метки)

Почему эффективный адрес переменной допустим этого примера уменьшается на 0xC при каждом создании новой переменной.


C++
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
 
int main() {
  int u,p,s;
  cout << &u << ' ' << &p << ' '<< &s;
  return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2011, 14:14     Эффективный адрес переменной
Посмотрите здесь:

Вывести адрес переменной - C++
Как вывести на экран адрес переменной? #include &lt;iostream&gt; #include &lt;conio.h&gt; int main(){ int a=2,*p; *p=a; ...

Не сохраняется адрес переменной - C++
Передаю в функцию адресс переменной, на выходе из функции, адрес остаётся прежний, и я непоймк почему.. bool WinFS::fread( LPVOID buf...

взять адрес переменной - C++
если &amp; стоит перед переменной, то это читается как - &quot; взять адрес этой переменной&quot; а если он стоит после ?

Что такое адрес переменной? - C++
Добрый день! Задался вопросом, адрес переменной -это адрес чего? Если это место в памяти, а переменная занимает, например, в памяти 8...

Адрес переменной к типу (char*) - C++
Здравствуйте. Для &quot;запоминания&quot; данных переменных можно использовать сериализацию аля: int i = 12; ofstream f(&quot;text.txt&quot;); ...

Адрес переменной char не выводится - C++
Здравствия всем, люди добрые подскажите пожалуйста, что я как обычно делаю неправильно. int x = 6; int* ptr_x = &amp;x; cout &lt;&lt;...

Выводится содержимое переменной, а не адрес - C++
Тип char. Почему выводится содержимое? pAdd-&gt;name=a.taskName; cout&lt;&lt;&amp;a.taskName&lt;&lt;endl;

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.03.2011, 06:37     Эффективный адрес переменной #2
выведи sizeof(int)
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
10.03.2011, 09:41     Эффективный адрес переменной #3
У меня в VS 6 уменьшается на 4, а в VS2008 тоже на 12 уменьшается. Интерестно.!
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
10.03.2011, 10:24     Эффективный адрес переменной #4
уменьшается на 4. (code::blocks & mingw)
а это играет какую то роль? ну 4, ну 12..
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
10.03.2011, 10:55     Эффективный адрес переменной #5
в VS 2008 на 12 уменьшается каждая переменная. Просто интерестно, почему такая разница? Ведь для int смещение должно быть 4 байта, а не 12 байтов

Добавлено через 19 минут
Всё таки надо немного хотябы представлять, что творится в памяти.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
10.03.2011, 11:01     Эффективный адрес переменной #6
А в Release или в Debug?
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
10.03.2011, 11:08     Эффективный адрес переменной #7
в release смещение 4 байта, а почему так? если не секрет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2011, 11:19     Эффективный адрес переменной
Еще ссылки по теме:

Как выглядит адрес переменной - C++
Например: в массиве m={4,6,2} адрес второго элемента. Это будет 16-ричное число 0x06 ?

Как в адрес переменной ввести значение - C++
Доброго времени суток! Проблема в том что переменная &quot;ID&quot; сама считается и вводиться, и как её заталкать я не знаю, до этого вводилось все...

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

Получить адрес переменной, и сохранить в виде строки - C++
Как получить адреc переменной, и записать этот адрес в другую переменную в виде строки std::string?

Возможно ли определить имя переменной, зная ее значение и адрес? - C++
Возник вопрос: возможно ли как-то определить имя переменной, зная, скажем, ее значение и адрес. Если можно, то как вообще это реализовать?


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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
10.03.2011, 11:19     Эффективный адрес переменной #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ага! Так и должно быть.

А дело здесь вот в чем: хитрый компилятор от MS вокруг каждой переменной в режиме отладки (Debug) создает "буферную зону" и заполняет ее магическим значением 0xCD (а с учетом выравнивания на DWORD - 0xCDCDCDCD), ежли мой склероз мне не изменяет. Где-то в конце функции он проверяет эти значения, и, если паче чаяния не обнаружит там все то же нетронутое магическое число 0xCD, немедленно начнет ругаться - "stack around variable .... was corrupt" - что означает, что в коде имеется баг и ты промахнулся при записи в переменную. В Release это может иметь совершенно фатальные последствия. В Debug же ошибка будет обнаружена.
Ну а в Release этой буферной зоны он не создает - считается, что к релизу все ошибки должны быть устранены.
Во.
Yandex
Объявления
10.03.2011, 11:19     Эффективный адрес переменной
Ответ Создать тему
Опции темы

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