Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выделение памяти в стэке под переменные 
:(
    Опции темы
Liebe23
  Дата 18.2.2007, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



Помогите разобраться:

Внутри main() завожу подряд несколько переменных, и прошу вывести подряд их адреса. 
Например:
Код


  unsigned short int ShortVar = 10;
  unsigned long int LongVar = 20;
  int Var = 30;

  unsigned short int *pShortVar = &ShortVar;
  unsigned long int *pLongVar = &LongVar;
  int *pVar = &Var;

  cout << "ShortVar adress: " << pShortVar <<endl;
  cout << "LongVar adress: " << pLongVar <<endl;
  cout << "Var adress: " << pVar <<endl;


  cout << sizeof(ShortVar) <<endl;
  cout << sizeof(LongVar) <<endl;
  cout << sizeof(Var) <<endl;



Последние три строки - для проверки того, сколько байт тратится на переменную.

Результат выполнения программы:

ShortVar adress: 1245066
LongVar adress: 1245060
Var adress: 1245056
2
4
4

На переменную типа unsigned long int 6 байт! И сразу же он пишет, что она занимает всего 4! 

Затем я поменяла порядок объявления переменных в программе, но адреса не изменились! То есть рез-т вывода адресов тот же. Только теперь переменная unsigned short int занимает 6 байт. (?!)

И последний вопрос:
почему меньший адрес имеет переменная, объявленная последней? Компилятор записывает их в обратном порядке?Зачем?


Если кто может помочь разобраться - буду Очень признательна. правда, не понимаю - в чем тут дело.
Спасибо smile


Это сообщение отредактировал(а) Liebe23 - 18.2.2007, 01:59
PM MAIL   Вверх
Sartorius
Дата 18.2.2007, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



 причина всего, что ты перечислила - выравнивание в стеке на 32 бита и то что он растет вниз.
PM MAIL ICQ   Вверх
Liebe23
Дата 18.2.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



спасибо, почитала про выделение  разобраласьsmile
PM MAIL   Вверх
Annihilator
Дата 19.2.2007, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Цитата(Liebe23 @  18.2.2007,  15:47 Найти цитируемый пост)
спасибо, почитала про выделение  разобралась

Подскажи, плиз, где почитала


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Rockie
Дата 19.2.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Liebe23, 
Цитата(Liebe23 @  18.2.2007,  01:55 Найти цитируемый пост)
 unsigned long int LongVar = 20;

imho лучше с маленькой буквы:
Код

longVar


Annihilator, 
выравнивание




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0795 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.