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

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

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

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

02.06.2011, 09:04. Просмотров 1503. Ответов 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++):

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

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

Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти? - C++
Добрый день. Не могу найти информацию по двум вопросам : 1) могу ли я разместить переменную в нужную ячейку памяти. Например: int a...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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 тому пример.
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 - это как понимать? ;-))
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 11:00 #21
Цитата Сообщение от taras atavin Посмотреть сообщение
WNDCLASSEX тому пример.
лишнее поле, примеров то полно, а смысла хранить размер самой структуры в поле структуры, имхо, во-первых, лишняя память, во-вторых, это не нужно вообще
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 11:02 #22
Цитата Сообщение от FarStar Посмотреть сообщение
но он же одинаковый всегда
нет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct A
{
 int q;
 int w;
};
struct B // размер этой структуры, даже пустой, в два раза больше, чем A. В 32-х разрядных системах A занимает 64, а B 128 байта, при заполнении этот размер не меняется.
{
 int q;
 int w;
 int e;
 int r;
};
.

Добавлено через 45 секунд
Цитата Сообщение от FarStar Посмотреть сообщение
объявление со строкой typedef? Чем это круче ? ;-))
Не круче. Просто так объявляются все новые склярные типы, кроме enum.
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 11:02 #23
FarStar,

поставь людям плюсики, закрой тему и иди почитай какой нибудь учебник по С
FarStar
Заблокирован
02.06.2011, 11:03  [ТС] #24
Цитата Сообщение от taras atavin Посмотреть сообщение
LP - уже указатель. c++ этого не понимает и если ты просто напишешь LPDWORD, то нифига не получится. Но типы с префиксом LP принято декларировать как указательные. Так что звёздочку в декларации указателя ставить уже не надо, иначе получишь указатель на указатель.
WNDCLASSEX тому пример.
Не понял, тыж сам сказал что С++ этого не понимает и что это просто так принято, так почему получится указатель на указатель?
Вот это что : LPDOWRD *cool; ?
а это: LPDWORD cool?
а это DWORD cool?
а это DWORD *cool?
;-))
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 11:04 #25
Цитата Сообщение от denix Посмотреть сообщение
лишнее поле, примеров то полно, а смысла хранить размер самой структуры в поле структуры, имхо, во-первых, лишняя память, во-вторых, это не нужно вообще
согласен и никогда так не делаю.
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 11:05 #26
Цитата Сообщение от taras atavin Посмотреть сообщение
Просто так объявляются все новые склярные типы, кроме enum.

во-первых,
не объявляются, а определяются.
во вторых, не новые типы, а новые имена типов
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 11:09 #27
Цитата Сообщение от FarStar Посмотреть сообщение
Не понял, тыж сам сказал что С++ этого не понимает и что это просто так принято, так почему получится указатель на указатель?
Так принято людьми, а не понимает c++. Но в декларации типа кроме самого префикса есть ещё одно указание на то, что это тип указателя, его уже читает и понимает компил, а люди, кроме аторов каждой такой декларации, обычно не видят. Но одно с другим связано, потому что так принято.

Добавлено через 3 минуты
Цитата Сообщение от denix Посмотреть сообщение
во вторых, не новые типы, а новые имена типов
А есть разница?
Цитата Сообщение от denix Посмотреть сообщение
не объявляются, а определяются.
Я учил сначал паскаль, а там есть разделы деклараций (объявлений) и раздел операций. Типы в принципе упоминаются только в разделах деклараций. Раздел типов (где они по твоей версии определяются) - один из этих разделов, а в разделе перемнных эти дкларации используются.
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 11:09 #28
FarStar, пока не сядешь за книжку, вопросы у тебя будут появляться в геометрической последовательностью.
почитай, и все будет тебе ясно, и вопросов таких задавать ты не будешь

удачи
FarStar
Заблокирован
02.06.2011, 11:10  [ТС] #29
Пл.сики всем поставил :-)) А зачем они нужны то ваще ?

Так что, если я хочу объявить указатель, то мне достаточно перед его именем добавить LP? и будет считаться, что это указатель?
Или я могу объявить его без LP, но со звёздочкой, к примеру, DWORD *pointer; - будет тоже самое ?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 11:12 #30
Цитата Сообщение от denix Посмотреть сообщение
лишнее поле, примеров то полно, а смысла хранить размер самой структуры в поле структуры, имхо, во-первых, лишняя память, во-вторых, это не нужно вообще
Кстати, только что ты впервые об этом слышал, а теперь примеров то полно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2011, 11:12
Привет! Вот еще темы с ответами:

Запуск .NET C# программы из памяти C++ приложения - C++
Понадобилось реализовать запуск .NET C# программы прямо из памяти C++ приложения. Использую функцию: BOOL ExecFile(LPWSTR szFilePath,...

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.06.2011, 11:12
Ответ Создать тему
Опции темы

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