Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Ze
4 / 4 / 0
Регистрация: 30.10.2010
Сообщений: 12
1

Расположение данных в стеке и в куче

01.06.2012, 16:52. Показов 1475. Ответов 2
Метки нет (Все метки)

Друзья, возник вопрос.
Следующий код
C++
1
2
3
char length_buffer[4];
...заполнение length_buffer двоичным представлением целого числа 999...
int length = *reinterpret_cast<int *>(&length_buffer);
работает. переменная length принимает значение 999.
Но если четырехбайтовый массив расместить в куче, тоже самое двоичное значение перестает интерпретироваться как 999:
C++
1
2
3
char *length_buffer = new char[4];
...заполнение length_buffer двоичным представлением целого числа 999...
int length = *reinterpret_cast<int *>(&length_buffer);
не работает.

Первое предположение было - из-за того что адресация в куче идет снизу, а в стеке - сверху. Однако выяснилось, что одно и то же двоичное представление 999 в куче интерпретируется каждый раз как разные значения.

Прошу не сыпать сообщениями вида "для чего это надо, неправильный подход", "reinterpret_cast - зло" и т.п.
А ответить по существу о причине такого поведения. Заранее благодарен.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2012, 16:52
Ответы с готовыми решениями:

Создание массивов в стеке и куче
&quot;Напишите небольшую программу,которая создаёт массивы в стеке(массивы фиксированного размера) и...

Не могу понять где объект в куче или в стеке !
Сразу к примеру: class Zombie; { Soldat soldat; // что солдат внутри зомби делает не...

Как происходит процесс выделения памяти в стеке и куче
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &quot;disc.h&quot; void main() { ...

Как выделяется память на стеке и на куче? Когда нужна ручная очистка?
Всем здрасьте. //1 char s = 's'; //2 char* ss = new char; Во втором случае компилятор...

2
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
01.06.2012, 17:36 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
   int arr[10];
   int* p = new int();
   std::cout << arr << '\n'      //arr - адрес 1-го элемента массива
                << &arr << '\n'; //&arr - адрес 1-го элемента массива
   std::cout << p << '\n'        //p - адрес на который указывает указатель
                << &p << '\n';   //&p - адрес самого указателя
   delete p;
}
http://liveworkspace.org/code/... 6e23dd346a
2
Ze
4 / 4 / 0
Регистрация: 30.10.2010
Сообщений: 12
01.06.2012, 17:49  [ТС] 3
Большое спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2012, 17:49

Создать стек из вещественных чисел; найти максимальный элемент в стеке; организовать просмотр данных стека
Создать стек из вещественных чисел. Определить максимальный элемент в стеке. Организовать просмотр...

Интерфейс хранится в стеке или в куче?
интерфейс хранится в стеке или в куче?

Создание QApplication на стеке или в куче
Только начал разбираться с QT и появилось неск. глупых вопросов: - Какая разница между ...

Несколько моментов про хранение в куче и в стеке
Хотел уточнить несколько моментов про хранение в куче и в стеке: 1) Ссылочные типы всегда...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.