3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
|
||||||
1 | ||||||
Эффективный адрес переменной09.03.2011, 14:14. Показов 1834. Ответов 7
Метки нет (Все метки)
Почему эффективный адрес переменной допустим этого примера уменьшается на 0xC при каждом создании новой переменной.
0
|
09.03.2011, 14:14 | |
Ответы с готовыми решениями:
7
Создать две переменных, ввести их с клавиатуры. Вывести строки: имя переменной - адрес переменной - значение п взять адрес переменной Вывести адрес переменной Не сохраняется адрес переменной |
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 | |
10.03.2011, 11:19 | |
Помогаю со студенческими работами здесь
8
Указатели, адрес переменной Адрес переменной char не выводится Что такое адрес переменной? Адрес переменной к типу (char*) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |