С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
1

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

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

Author24 — интернет-сервис помощи студентам
Почему эффективный адрес переменной допустим этого примера уменьшается на 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;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2011, 14:14
Ответы с готовыми решениями:

Создать две переменных, ввести их с клавиатуры. Вывести строки: имя переменной - адрес переменной - значение п
Создать две переменных, ввести их с клавиатуры. Вывести строки: имя переменной - адрес переменной...

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

Вывести адрес переменной
Как вывести на экран адрес переменной? #include &lt;iostream&gt; #include &lt;conio.h&gt; int main(){ ...

Не сохраняется адрес переменной
Передаю в функцию адресс переменной, на выходе из функции, адрес остаётся прежний, и я непоймк...

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

Добавлено через 19 минут
Всё таки надо немного хотябы представлять, что творится в памяти.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.03.2011, 11:01 6
А в Release или в Debug?
1
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
10.03.2011, 11:08 7
в release смещение 4 байта, а почему так? если не секрет
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.03.2011, 11:19 8
Лучший ответ Сообщение было отмечено как решение

Решение

Ага! Так и должно быть.

А дело здесь вот в чем: хитрый компилятор от MS вокруг каждой переменной в режиме отладки (Debug) создает "буферную зону" и заполняет ее магическим значением 0xCD (а с учетом выравнивания на DWORD - 0xCDCDCDCD), ежли мой склероз мне не изменяет. Где-то в конце функции он проверяет эти значения, и, если паче чаяния не обнаружит там все то же нетронутое магическое число 0xCD, немедленно начнет ругаться - "stack around variable .... was corrupt" - что означает, что в коде имеется баг и ты промахнулся при записи в переменную. В Release это может иметь совершенно фатальные последствия. В Debug же ошибка будет обнаружена.
Ну а в Release этой буферной зоны он не создает - считается, что к релизу все ошибки должны быть устранены.
Во.
4
10.03.2011, 11:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2011, 11:19
Помогаю со студенческими работами здесь

Указатели, адрес переменной
int main(коллеги!) Снова прошу меня поправить! Есть такой пример: int *ptr; //...

Адрес переменной char не выводится
Здравствия всем, люди добрые подскажите пожалуйста, что я как обычно делаю неправильно. int x =...

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru