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

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от 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
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
Ушёл с форума.
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
3033 / 2354 / 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++
Привет! Вы не подскажите, где в памяти храниться тип указателя? Ну допустим, у нас x86 и указатель занимает 4 байта, но эти 4-е байта -...

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

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

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

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


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

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

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