![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Пытаюсь проанализировать размещение переменных в стеке... Почему разница между адресами переменных a и b равна 12 ?
Результат работы программы: size of int: 4 size of char: 1 p1 address: 0012FE7C value is 1 p2 address: 0012FF54 value is 2 a address: 0012FE6C not initialized b address: 0012FE60 value is 3 |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
почитай disassembly и все увидишь...
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Видимо я неправильно понимаю организацию работы стека... Я предполагал, что объекты ложатся в стек последовательно. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
А можно чуть подробнее про это выравнивание? Первый раз слышу... Что-то связанное с отладочной информацией?
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
http://en.wikipedia.org/wiki/Data_structure_alignment ну эти вещи не связаны. просто в твоем случае из-за режима отладки такие результаты |
|||
|
||||
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Всем спасибо за участие!
Это сообщение отредактировал(а) FiMa1 - 11.5.2007, 17:24 |
|||
|
||||
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Выключил отладочную информацию - выставил Release в VS 2005.
Результат работы программы: 4 0012FEE4-0012FEE0=1 Почему 0012FEE4-0012FEE0=1, а не 4. Если все-таки 4, то почему 4 байта, ведь имеем две целых переменных по 4 байта каждая, т.е. 8 байт. |
|||
|
||||
| nickless |
|
||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Для типизированных указателей разница (да и всё остальное тоже) вычисляется в размерах типов, т.е. в этом случае в intах.
Если сделать
то выдаст 4, потому что в указателе адрес _начала_ переменной -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||
|
|||||
| FiMa1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Имеем нижеприведенный код.
Результат работы программы: 0012FEE4 0012FEE0 STACK 1::p1 0012FED4 value is 1 STACK 1::p2 0012FEE0 value is 2 STACK 1::i 0012FEC0 value is 1 STACK 1::i1 0012FEB8 value is 3 STACK 1.1::i 0012FEB4 value is 2 STACK 1.1::i2 0012FEC4 value is 5 STACK 1.1.1::i 0012FEC8 value is 9 STACK 1.1.1::i3 0012FEBC value is 7 STACK 1.1::i 0012FEB4 value is 8 STACK 1.1.1::d 0012FEC8 value is 16 STACK 1.1::i 0012FEB4 value is 3 STACK 1.1::s 0012FEBC value is abs Почему 0012FEC0 (STACK 1::i) - 0012FEB8 (STACK 1::i1) = 8 (отладочная информация выключена - Release ) ? Да и вообще, по-моему, на моей машине стек должен "расти" вниз... Это сообщение отредактировал(а) FiMa1 - 14.5.2007, 15:22 |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Скорее всего, имеем, опять-таки, выравнивание. |
|||
|
||||
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
От этого можно хоть как-нибудь избавиться? Хочу просмотреть чисто работу стека... IDE VS 2005. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |