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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
FarStar
Заблокирован
#1

Где в памяти храняться данные моего приложения? - C++

02.06.2011, 09:04. Просмотров 1454. Ответов 35
Метки нет (Все метки)

Добрый день! Подскажите кто знает, у меня тут пара нубских вопросов:
1. Вот когда я создаю данные какого - нибуть типа, например DWORD data, я могу присвоить переменной data значение, к примеру, 200, а могу и C8 (это 200 в HEX). Так вот вопрос, С++ всё равно в какой системе исчисления и присваиваю значение переменной или всётаки нет ?

2. Создаю всю туже глобальную переменную DWORD data=200. Хотелось бы узнать, по какому адресу моё приложение загонит её в оперативную память? Ну если так подумать, DWORD - это ж дабл ворд, тоесть 32-х разрядная переменная, тоесть в ней два WORD и 4 BYTE, правильно? Тоесть создавая переменную DOWRD data=200, грубо говоря добавляются не значимые нули слева для соответствия разрядности, короче говоря, в какой блок памяти все эти 32 бита заносятся. Суть в следующем: хочу ради эксперимента в одном приложение создать DWORD data, а в другом приложение обратиться к блоку памяти с этой переменной и прочитать его, это же возможно? Или мне напишут в Windows что - типа ЭКСЭС ДИНАЙТ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2011, 09:04     Где в памяти храняться данные моего приложения?
Посмотрите здесь:

С-строки. Где храняться? Когда удаляются? - C++
есть, к примеру, такой класс class Hero { private: char * name; public: Hero(char * n = "TORIN")

API для моего приложения - C++
Этап 1. Я пишу приложение для windows, оно делает какую-то работу, что-то считает и т.п. У него в результате этой работы появляются...

В строковом массиве храняться фамилии и инициалы учеников класса. - C++
В строковом массиве храняться фамилии и инициалы учеников класса.Требуется напечатать список класса с указанием для каждого ученика...

Массив: Найти произведение двух верхнеугольных матриц, которые храняться в упакованном виде в одномерных массивах. - C++
Найти произведение двух верхнеугольных матриц,которые храняться в упакованном виде в одномерных масивах.

Поиск адреса длл в памяти приложения - C++
Это снова я! И снова проблема. Я пытался получить хендл загружаемой библиотеки как пробовали тут:...

Данные по адресу памяти - C++
У меня есть адрес например 0x11E9B62C как узнать что по нему записанно?

Где хранить размер блока памяти? - C++
Пишу менеджер памяти. Храню размер в первых 4x байтах выделенной памяти. В коде все вызовы new заменяю на следующее: //Iterator...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.06.2011, 09:17     Где в памяти храняться данные моего приложения? #2
SIGSEGV наверно
FarStar
Заблокирован
02.06.2011, 09:22  [ТС]     Где в памяти храняться данные моего приложения? #3
Ладно, а если я хочу прочитать не из другого приложения, а из этого же, но не буду смотреть на то, что у меня явно есть эти данные DWORD data, а попробую обратиться к блоку памяти для чтения этих данных, например, к какому нибуть блоку типа 0xFFFAD (в общем на низком уровне). К КАКОМУ БЛОКУ ОБРАЩАТЬСЯ? Куда переменные суются статические?
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.06.2011, 09:43     Где в памяти храняться данные моего приложения? #4
в один из сегментов данных. Адресс "блока" можно получить операторм &
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 09:58     Где в памяти храняться данные моего приложения? #5
Цитата Сообщение от FarStar Посмотреть сообщение
1. Вот когда я создаю данные какого - нибуть типа, например DWORD data, я могу присвоить переменной data значение, к примеру, 200, а могу и C8 (это 200 в HEX). Так вот вопрос, С++ всё равно в какой системе исчисления и присваиваю значение переменной или всётаки нет ?
Переменным в любом случае присваиваются только двоичные значения, в твоём случае 00000000000000000000000011001000, всё остальное подлежит автоматическому переводу, так что разницы нет.
FarStar
Заблокирован
02.06.2011, 09:58  [ТС]     Где в памяти храняться данные моего приложения? #6
Слушай, я самоучка и у меня есть какие - то базовые пробелы в знаниях походу дела....
Можешь мне помочь в этой же теме:
1. Вот чем отличается создание указателя на интерфейс,к примеру, на директ Х - см ниже
а) LPDIRECTINPUT8 di; PS. на счёт точности названия не уверен.
б) LPDIRECTINPUT8 *di;
2. что означает приставка "LP" в данном случае? Это ж какой - то хороший тон программирования или что?
3. Вот оператор &, про который ты написал, что может означать опять же в данном случае, к примеру:
a) LPDIRECTINPUT8 di; создал без звёздочки
InitDI(&di); нужен оператор (если функция со звёздочкой)
б) LPDIRECTINPUT8 *di; создал со звёздочкой
InitDI(di); уже не нужен оператор &.

Тоесть для чего звёздочка и & оператор?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 10:00     Где в памяти храняться данные моего приложения? #7
Цитата Сообщение от FarStar Посмотреть сообщение
2. Создаю всю туже глобальную переменную DWORD data=200. Хотелось бы узнать, по какому адресу моё приложение загонит её в оперативную память?
C++
1
2
DWORD *p=&data;
std::cout<<p;
Но при повторном запуске врядли можно гарантировать размещение по тому же адресу.
FarStar
Заблокирован
02.06.2011, 10:01  [ТС]     Где в памяти храняться данные моего приложения? #8
Цитата Сообщение от taras atavin Посмотреть сообщение
Переменным в любом случае присваиваются только двоичные значения, в твоём случае 00000000000000000000000011001000, всё остальное подлежит автоматическому переводу, так что разницы нет.
Спасибо! теперь понял! Тоесть я могу и в HEX и в DEC и в OCT и в BIN присваивать значения переменным! отлично! ;-))
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 10:02     Где в памяти храняться данные моего приложения? #9
Цитата Сообщение от FarStar Посмотреть сообщение
Добрый день! Подскажите кто знает, у меня тут пара нубских вопросов:
1. Вот когда я создаю данные какого - нибуть типа, например DWORD data, я могу присвоить переменной data значение, к примеру, 200, а могу и C8 (это 200 в HEX). Так вот вопрос, С++ всё равно в какой системе исчисления и присваиваю значение переменной или всётаки нет ?
все равно.

Цитата Сообщение от FarStar Посмотреть сообщение
2. Создаю всю туже глобальную переменную DWORD data=200. Хотелось бы узнать, по какому адресу моё приложение загонит её в оперативную память?
зависит от систему, от ld. смотри сегмен .data, если ты ее проинициализировал при объявлении.

Цитата Сообщение от FarStar Посмотреть сообщение
Ну если так подумать, DWORD - это ж дабл ворд, тоесть 32-х разрядная переменная, тоесть в ней два WORD и 4 BYTE, правильно?
от процессора зависит, кури маны на проц, скольки байтам у проца равно машинное слово.

Цитата Сообщение от FarStar Посмотреть сообщение
Суть в следующем: хочу ради эксперимента в одном приложение создать DWORD data, а в другом приложение обратиться к блоку памяти с этой переменной и прочитать его, это же возможно? Или мне напишут в Windows что - типа ЭКСЭС ДИНАЙТ?
используй разделяемую память хотя б.

разные приложения работают в разных виртуальных адресных пространствах
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 10:04     Где в памяти храняться данные моего приложения? #10
Цитата Сообщение от FarStar Посмотреть сообщение
уть в следующем: хочу ради эксперимента в одном приложение создать DWORD data, а в другом приложение обратиться к блоку памяти с этой переменной и прочитать его, это же возможно?
Если ты не позаботеился об этом в первом приложении, то нет. Существуют физические и виртуальынек адреса, любое приложние работает только с виртуальными адресами, причём, у каждого собственное вирутальное адресное пространство, чужая паямть туда вообще не отображается. В принципе существует так называемая глобальная память, отображаемая сразу на несколько адресных пространств, но размещать данные в глобальной памяти должно приложние-источник. Под какую систему пишешь? Разбирайся с соотвествующими спецификациями средств обмена данными между приложениями.
FarStar
Заблокирован
02.06.2011, 10:07  [ТС]     Где в памяти храняться данные моего приложения? #11
Да это всё под WindowsXP на процессоре Intel
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 10:08     Где в памяти храняться данные моего приложения? #12
Тогда читай DDE.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.06.2011, 10:11     Где в памяти храняться данные моего приложения? #13
Цитата Сообщение от FarStar Посмотреть сообщение
Тоесть для чего звёздочка и & оператор?
& это ссылка на объект, её можно воспринимать как константный указатель
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i = 24754;
011115AE  mov         dword ptr [i],60B2h 
    int &p = i;
011115B5  lea         eax,[i] 
011115B8  mov         dword ptr [p],eax 
    int *const pp = &i;
011115BB  lea         eax,[i] 
011115BE  mov         dword ptr [pp],eax 
    p = 1526;
011115C1  mov         eax,dword ptr [p] 
011115C4  mov         dword ptr [eax],5F6h 
    *pp = 385;
011115CA  mov         eax,dword ptr [pp] 
011115CD  mov         dword ptr [eax],181h
Добавлено через 2 минуты
интересно как ArtMoney роется в чужих адресных пространствах?
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 10:11     Где в памяти храняться данные моего приложения? #14
Цитата Сообщение от FarStar Посмотреть сообщение
Слушай, я самоучка и у меня есть какие - то базовые пробелы в знаниях походу дела....
Можешь мне помочь в этой же теме:
1. Вот чем отличается создание указателя на интерфейс,к примеру, на директ Х - см ниже
а) LPDIRECTINPUT8 di; PS. на счёт точности названия не уверен.
б) LPDIRECTINPUT8 *di;
2. что означает приставка "LP" в данном случае? Это ж какой - то хороший тон программирования или что?
3. Вот оператор &, про который ты написал, что может означать опять же в данном случае, к примеру:
a) LPDIRECTINPUT8 di; создал без звёздочки
InitDI(&di); нужен оператор (если функция со звёздочкой)
б) LPDIRECTINPUT8 *di; создал со звёздочкой
InitDI(di); уже не нужен оператор &.

Тоесть для чего звёздочка и & оператор?

следует отличать оператор * при объявлении переменных и при разыменовании указателя.

int* ptr; /* bcgjkmpetv * при объявлении указателя*/
int data=0x777;

ptr=&data; /* берем адрес data и присваеваем адресс указателю*/

printf("ptr is %p\nptr->%d\n",ptr,*ptr); /*смотрим чему равно значение указателя(куда он указывает, т.е. там храниться адресс); *ptr -> вот тут мы разыменовываем этот адресс, т.е. берем значение по этому адресу*/
FarStar
Заблокирован
02.06.2011, 10:12  [ТС]     Где в памяти храняться данные моего приложения? #15
Да это всё под WinXP и под Intel X86.
Ну что оператор & как бы берёт адрес переменной я понял, а оператор * что делает?
К примеру: IDirectInput8 *DI;
И что всё таки означает приставка "LP" в LPDIRECTINPUT8 ?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 10:13     Где в памяти храняться данные моего приложения? #16
C++
1
&
перед уже объявленной переменной - её адрес, исспользуется для присвивания его указаетлю или передаче в параметр функции, имеющий указательный тип, а в декларации - ссылка, то есть особый вид указаетля, для доступа к данным по которому достаточно имени указателя без дополнительных символов, а доступ к членам по нему осуществляется по точечной нотации, а не с помощью
C++
1
->
.
C++
1
*
перед именем уже объявленной перемнной указательного типа используется для дсотупа к данным по этому указателю, а в декларации - чтоб объявить указатель.
FarStar
Заблокирован
02.06.2011, 10:27  [ТС]     Где в памяти храняться данные моего приложения? #17
Так, правильно ли я понял, если есть у меня функция:
void Test(LPDIRECTINPUT8 *di, DWORD data)
{
di-> мне здес нужен, что я мог с интерфейсом директ инпута работать внутри функции
а, "data" нужен для того, чтоб я мог, к примеру, конкретное число какое - то передать интерфейсу di
}
?

И всё же, что такое "LP" в LPDIRECTINPUT ? Подозреваю, что это сокращение от какого нибуть LowPath, но что это значит?

И ещё детский вопрос, зачастую в структурах, первое поле - это размер самой структуры,
который при инициализации объявляется обычно как sizeof(сама структура),
но зачем этой структуре каждый раз надо указывать размер самой себя при инициализации?
Он же указывается до присвоения значений другим полям структуры, тоесть получается это размер пустой структуры - но он же одинаковый всегда.....
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 10:47     Где в памяти храняться данные моего приложения? #18
Цитата Сообщение от FarStar Посмотреть сообщение
И всё же, что такое "LP" в LPDIRECTINPUT ? Подозреваю, что это сокращение от какого нибуть LowPath, но что это значит?
этот тип скорее всего определен с использованием typedef

Цитата Сообщение от FarStar Посмотреть сообщение
И ещё детский вопрос, зачастую в структурах, первое поле - это размер самой структуры,
который при инициализации объявляется обычно как sizeof(сама структура)
впервые такое слышу
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 10:57     Где в памяти храняться данные моего приложения? #19
LP - уже указатель. c++ этого не понимает и если ты просто напишешь LPDWORD, то нифига не получится. Но типы с префиксом LP принято декларировать как указательные. Так что звёздочку в декларации указателя ставить уже не надо, иначе получишь указатель на указатель.
Цитата Сообщение от denix Посмотреть сообщение
впервые такое слышу
WNDCLASSEX тому пример.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2011, 10:59     Где в памяти храняться данные моего приложения?
Еще ссылки по теме:

Где в памяти хранится тип указателя? - C++
Привет! Вы не подскажите, где в памяти храниться тип указателя? Ну допустим, у нас x86 и указатель занимает 4 байта, но эти 4-е байта -...

Где точка входа приложения? - C++
В общем, есть 3 файла. Разбирать их содержимое не нужно, меня интересует только конструкции include. Итак, файл main.cpp: #include...

Не могу прочитать данные ячейки памяти - C++
Подскажите пожалуйста что не так. Адресс ячейки вычислил через артмани. Код процесса выводит верно, а значение памяти нет. Для примера взял...

Как сохранить данные контейнера в разделяемой памяти - C++
Ищу быстрый способ обмена данными между процессами. Процессы - одинакового типа т.е одна и та же программа и все процессы на одной машине. ...

Strcpy - Символы, которые обрезали, остаются где-то в памяти или нет? - C++
char str; strcpy(str, &quot;Не надо стесняться!&quot;); str = '\0'; Символы, которые обрезали, остаются где-то в памяти или нет?


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

Или воспользуйтесь поиском по форуму:
FarStar
Заблокирован
02.06.2011, 10:59  [ТС]     Где в памяти храняться данные моего приложения? #20
Цитата Сообщение от denix Посмотреть сообщение
этот тип скорее всего определен с использованием typedef



впервые такое слышу
Я новичок, пардон за вопрос, чем отличается объявление со строкой typedef? Чем это круче ? ;-))
Что если я объявил интерфейс со строкой typedef мне обязательно в название ставит LP вначале названия? или это какое - то не гласное правило написание синтаксиса кода?


На счёт структуры - вот пример:
DIPROPRANGE diprg;
diprg.diph.dwSize = sizeof( DIPROPRANGE );
diprg.diph.dwHeaderSize = sizeof( DIPROPHEADER );
diprg.diph.dwHow = DIPH_BYID;
diprg.diph.dwObj = pdidoi->dwType; // Specify the enumerated axis
diprg.lMin = -65000;
diprg.lMax = +65000;

И ещё вопрос, что за извращённые переводы данных вот в этой функции:
if( FAILED( hr = DirectInput8Create( GetModuleHandle( NULL ), DIRECTINPUT_VERSION,
IID_IDirectInput8, ( VOID** )&g_pDI, NULL ) ) )
return hr;
Имеется ввиду вот это ( VOID** )&g_pDI - это как понимать? ;-))
Yandex
Объявления
02.06.2011, 10:59     Где в памяти храняться данные моего приложения?
Ответ Создать тему
Опции темы

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