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

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

Восстановить пароль Регистрация
 
ElvenDragon
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
09.03.2011, 14:14     Эффективный адрес переменной #1
Почему эффективный адрес переменной допустим этого примера уменьшается на 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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 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
100 / 87 / 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
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
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     Эффективный адрес переменной
Еще ссылки по теме:

Как получить адрес переменной типа unsigned char? C++
C++ Не сохраняется адрес переменной
C++ Получить адрес переменной, и сохранить в виде строки

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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
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     Эффективный адрес переменной
Ответ Создать тему
Опции темы

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