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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
FarStar
Заблокирован
02.06.2011, 09:04     Где в памяти храняться данные моего приложения? #1
Добрый день! Подскажите кто знает, у меня тут пара нубских вопросов:
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++ В строковом массиве храняться фамилии и инициалы учеников класса.
С-строки. Где храняться? Когда удаляются? C++
Массив: Найти произведение двух верхнеугольных матриц, которые храняться в упакованном виде в одномерных массивах. C++
Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти? C++
Где точка входа приложения? C++
C++ Используя класс list, в котором храняться фамилии студентов группы, организовать поиск по фамилии
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denix
 Аватар для denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 11:00     Где в памяти храняться данные моего приложения? #21
Цитата Сообщение от taras atavin Посмотреть сообщение
WNDCLASSEX тому пример.
лишнее поле, примеров то полно, а смысла хранить размер самой структуры в поле структуры, имхо, во-первых, лишняя память, во-вторых, это не нужно вообще
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для 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
 Аватар для 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
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 11:04     Где в памяти храняться данные моего приложения? #25
Цитата Сообщение от denix Посмотреть сообщение
лишнее поле, примеров то полно, а смысла хранить размер самой структуры в поле структуры, имхо, во-первых, лишняя память, во-вторых, это не нужно вообще
согласен и никогда так не делаю.
denix
 Аватар для denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 11:05     Где в памяти храняться данные моего приложения? #26
Цитата Сообщение от taras atavin Посмотреть сообщение
Просто так объявляются все новые склярные типы, кроме enum.

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

Добавлено через 3 минуты
Цитата Сообщение от denix Посмотреть сообщение
во вторых, не новые типы, а новые имена типов
А есть разница?
Цитата Сообщение от 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
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 11:12     Где в памяти храняться данные моего приложения? #30
Цитата Сообщение от denix Посмотреть сообщение
лишнее поле, примеров то полно, а смысла хранить размер самой структуры в поле структуры, имхо, во-первых, лишняя память, во-вторых, это не нужно вообще
Кстати, только что ты впервые об этом слышал, а теперь примеров то полно.
denix
 Аватар для denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 11:13     Где в памяти храняться данные моего приложения? #31
taras atavin, да разницы то нет, просто новых типов ты typedef не вводишь.
в С слова объявляются и определяются имеют разный смысл

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
Кстати, только что ты впервые об этом слышал, а теперь примеров то полно.
примеров полно у тех, кто второй месяц программы пишет
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 11:20     Где в памяти храняться данные моего приложения? #32
Цитата Сообщение от FarStar Посмотреть сообщение
Так что, если я хочу объявить указатель, то мне достаточно перед его именем добавить LP? и будет считаться, что это указатель?
Нет. Но другой програмер, прочитав такое имя, подумает, что это указаетль.
C++
1
2
int LPi; // ваще не правильно, в именах указателей для этого палая p без l.
LPint pdata; // подразумевается, что указатель, но c++ такого типа не знает.
C++
1
2
#define LPint double /* не правильно, так как вводит в заблуждение */
LPint pdata; // но теперь c++ уже знает, что это такое
C++
1
2
#define LPint *double /* не правильно, так как вводит в заблуждение */
LPint pdata; // но теперь c++ уже знает, что это такое. Только это указаетль на double
C++
1
2
#define LPint int /* не правильно, так как вводит в заблуждение */
LPint pdata; // но теперь c++ уже знает, что это такое
C++
1
2
3
#define LPint int* /* правильно */
LPint pdata; // вот теперь это указаетль
LPint data;  // и это тоже указатель, но если далеко от это декларации встретится это имя, то не сразу пйомут, что это указатель, а по предыдущему имени сразу
Добавлено через 46 секунд
А можно с макросом и не связываться, а действительно объявить такой тип.
denix
 Аватар для denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
02.06.2011, 11:24     Где в памяти храняться данные моего приложения? #33
Цитата Сообщение от taras atavin Посмотреть сообщение
1
2 #define LPint *double /* не правильно, так как вводит в заблуждение */
LPint pdata; // но теперь этот тип c++ уже знает
друг, ошибка!

я бы тебе все же хотел посоветовать разобраться с typedef и с define.
они имеют разную природу и ты не путай их. define никаких новых синонимов типов не вводит, он работает на стадии препроцессора.

не путай

удачи
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.06.2011, 11:36     Где в памяти храняться данные моего приложения? #34
Цитата Сообщение от denix Посмотреть сообщение
примеров полно у тех, кто второй месяц программы пишет
Мелкомягкие давно пишут.

Добавлено через 2 минуты
Цитата Сообщение от denix Посмотреть сообщение
друг, ошибка!
Уже исправил. Здесь действительно создаётся не тип, а макрос, подставляющий его описание. На паскале привык звать типом всё, что после
Pascal
1
:
, будь то
Pascal
1
2
type a=record q,w:integer; end;
b:a;
или
Pascal
1
b:record q,w:integer; end;
.
Добавлено через 3 минуты
C++
1
2
typedef int* LPint;
LPint pdata; // правильно и теперь действительно использовано имя типа
C++
1
2
#define LPint int*
LPint pdata; // а здесь на самом деле написано int* pdata, что в точности идентично int *pdata
Добавлено через 5 минут
Цитата Сообщение от denix Посмотреть сообщение
typedef не вводишь.
Как? typedef - сокращение от type define, дословно определение типа. Как же определение типа может его не вводить?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
02.06.2011, 12:00     Где в памяти храняться данные моего приложения? #35
Статья правда старая, но довольно таки познавательная
Типы данных
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2011, 14:27     Где в памяти храняться данные моего приложения?
Еще ссылки по теме:

C++ Где в памяти хранится тип указателя?
C++ Где хранить размер блока памяти?
C++ Есть записная книжка "filestream" где есть данные людей. Надо добавить данные через map container
C++ API для моего приложения
C++ Не могу прочитать данные ячейки памяти

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.06.2011, 14:27     Где в памяти храняться данные моего приложения? #36
Цитата Сообщение от taras atavin Посмотреть сообщение
Как же определение типа может его не вводить
typedef не вводит тип, он вводит только псевдоним существующего типа. Это разные вещи.
Yandex
Объявления
02.06.2011, 14:27     Где в памяти храняться данные моего приложения?
Ответ Создать тему
Опции темы

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