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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
#1

Выделение памяти по известному адресу - C++

20.07.2014, 22:22. Просмотров 1603. Ответов 29
Метки нет (Все метки)

Всем привет.

Вопрос сообственно в заголовке темы.
Как выделить память по нужному мне адресу, например:
Я хочу выделить память n* sizeof(T) по адресу 0x7fff2b98c30c
Сделать это нужно для того, чтобы я всегда потом мог обратиься к элементу, который там располагается.

И второй вопрос:
Как потом получить объект по этому фиксированному адресу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2014, 22:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение памяти по известному адресу (C++):

Вызвано исключение по адресу 0x0FD466CB (ucrtbased.dll). Динамическое выделение памяти - C++
Проблема в динамическом выделении памяти. Функция multiply доходит до возвращения объекта и вылетает исключение. Если функция вернет просто...

Чтение и запись значения по известному адресу - C++
Нужно реализовать чтение и запись переменной по адресу. Конкретно: есть флеш-игра, есть программа Cheat Engine, и есть значение в этой...

Общий параметр для всех классов и создание объекта по известному адресу - C++
Вообщем есть задание. Скажу сразу, вся реализация для меня понятна, за исключением одного момента. Поидее, мне нужен счётчик,...

Распределение памяти. Динамическое выделение памяти - C++
an-1 an-2 ... a2

Выделение памяти, проверка на утечку памяти - C++
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти? Может быть, есть более простые...

Прочитать из памяти по адресу - C++
Задача: в памяти по адресу 0040:0010h (0x00400010) записано слово (информация о подключенном оборудовании). Нужно прочитать 12-й бит этого...

29
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 22:30 #2
где то тут я уже задавал этот вопрос... я так понял нельзя так сделать увы
1
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
20.07.2014, 22:33  [ТС] #3
Хорошо, а как тогда мне создать объект-счётчик в конструкторе класса так, чтобы потом создавая другой объект этого же класса проверить есть ли уже объект-счётчик общий для всех и не создавать его?
Я всё пытаюсь реализовать shared_ptr, но на просторах интернета нету совершенно ни одной нормальной реализации, кроме мега-сложной в boost.
Люди делают очевидные и простые вещи, которые можно сделать и так, но когда речь заходит о:

C++
1
2
3
4
5
6
7
shared_ptr<T> a;
shared_ptr<T> b;
 
int x;
 
a = x;
b = x;
То никто даже мыслишки не подкинет.
Получается что нужно создавать базу этих самых shared_ptr и какой-то параметр, чтобы они себя идентифицировали.
Но как создать эту базу, массив, объект, если каждый раз он теряется, ведь создать его нужно в самом классе shared_ptr?
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 22:35 #4
Цитата Сообщение от kordax Посмотреть сообщение
Хорошо, а как тогда мне создать объект-счётчик в конструкторе класса так, чтобы потом создавая другой объект этого же класса проверить есть ли уже объект-счётчик общий для всех и не создавать его?
нуу я не уверен что оно для этого подходит, но возможно поможет слово static...
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
20.07.2014, 22:38 #5
kordax, была тут тема Shared_ptr собственная реализация
0
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
20.07.2014, 22:39  [ТС] #6
Там совсем не то.
Там используется свой, нестандартный object, с которым shared_ptr и работает.
У меня он шаблонный, как настоящий и умеет работать со стандартными объектами, которые я не перегружаю никак.

Написать свой собственный object и фиксировать в нём это вообще дело нетрудное, но сделано не так, это просто халява.
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 22:41 #7
оно?
0
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
20.07.2014, 22:43  [ТС] #8
Именно оно, но реализации тут нету.
Опять же встаёт вопрос о создании в классе абстрагированного объекта, который будет существовать по известному пути так, чтобы его можно было найти и он будет общий для всех объектов share_ptr.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
20.07.2014, 22:48 #9
Цитата Сообщение от kordax Посмотреть сообщение
Там используется свой, нестандартный object, с которым shared_ptr и работает.
У меня он шаблонный, как настоящий и умеет работать со стандартными объектами, которые я не перегружаю никак.
Там есть ссылки на код, посмотри:
http://ideone.com/J3YYC4 - тут просто меняешь object на параметр шаблона
http://ideone.com/6n1jFV - тут и так шаблон класса (правда как тут оно работает я не знаю).
0
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
20.07.2014, 22:51  [ТС] #10
В случае:
C++
1
2
3
4
5
6
7
shared_ptr<int> a;
shared_ptr<int> b;
 
int x;
 
a = x;
b = x;
Как он сработает? Ведь тут счётчик должен показывать, что на объект x уже стоит два указателя.
Там я вижу только через operator= или я не прав? Возможно проглядел, прошу поправить.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
20.07.2014, 23:01 #11
Цитата Сообщение от kordax Посмотреть сообщение
Там я вижу только через operator= или я не прав?
Да, через присвоение и конструкторы\деструкторы. Только shared_ptr с указателями работает, а не с объектами. В той реализации что я знаю работает так: в отдельной структуре храниться указатель на объект и счётчик; объекты shared_ptr ссылаются на неё, соответственно тут a и b будут ссылаться на один и тот же экземпляр этой структуры; при присвоении\конструировании из указателя на объект создаётся такая структура, счётчик == 1, при конструировании\присвоении из другого shared_ptr просто увеличивается счётчик; в деструкторе декремент счётчика, если счётчик == 0, то удаляем структуру.

Добавлено через 1 минуту
Можно посмотреть, как реализован shared_ptr в стандартной библиотеке\boost\ещё где, но там разобраться думаю будет сложнее, так как эти реализации уже не "на коленке" сделаны.
0
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
20.07.2014, 23:07  [ТС] #12
Блин, это не то.
А мысли как реализовать по-моему может есть у кого?
Аля:
C++
1
2
3
4
5
6
7
8
9
shared_ptr<int> a;
shared_ptr<int> b;
 
int x;
 
a = x;
b = x;
 
cout << *a.counter; //На вывод идёт 2
В бусте посмотрел и не осилил, там хардкор для ценителей ассемблера.
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,293
20.07.2014, 23:11 #13
Цитата Сообщение от kordax Посмотреть сообщение
чтобы потом создавая другой объект этого же класса проверить есть ли уже объект-счётчик общий для всех и не создавать его?
Я всё пытаюсь реализовать shared_ptr, но на просторах интернета нету совершенно ни одной нормальной реализации, кроме мега-сложной в boost.
Проблема в том, что обычный shared_ptr так не работает. Суть shared_ptr в том, что создав однажды объект, записав его указатель в экземпляр shared_ptr, а потом скопировав экземпляр shared_ptr, мы получим увеличение значения счетчика ссылок. Соответственно при уничтожении экземпляра (уже ссылающегося на наш объект) shared_ptr, мы получим уменьшение значения счетчика ссылок. Если мы создали два независимых shared_ptr, то никакого общего счетчика ссылок естественно у них не будет. Это я к тому, что ты пытаешься сделать нечто свое и исходники shared_ptr тебе все равно в этом не помогли бы. Хотя вот, можешь посмотреть.

Цитата Сообщение от kordax Посмотреть сообщение
C++
1
2
3
4
5
6
7
shared_ptr<int> a;
shared_ptr<int> b;
 
int x;
 
a = x;
b = x;
Как он сработает? Ведь тут счётчик должен показывать, что на объект x уже стоит два указателя.
Если, опять же, мы рассматриваем стандартный shared_ptr, то ответ нет, счетчик в этом случае не должен этого показывать.
1
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
20.07.2014, 23:14  [ТС] #14
Да, это уже понял.
Хорошо, а то что я хочу, оно вообще реализуемо?
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,293
20.07.2014, 23:14 #15
Цитата Сообщение от kordax Посмотреть сообщение
А мысли как реализовать по-моему может есть у кого?
Счетчик ссылок должен быть синглтоном, инстанция которого зависит от типа, переданного в твой shared_ptr. Тогда ты сможешь считать независимые объекты shared_ptr одного типа одним и тем же счетчиком.
Только я не очень понимаю какой смысл в таком классе?
1
20.07.2014, 23:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2014, 23:14
Привет! Вот еще темы с ответами:

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

Доступ к памяти по адресу - C++
Есть структура, элементы которой адрес на начало массива в памяти и его размер. Адреса хранятся в 16-ричном формате. Мне нужно распечатать...

Доступ к произвольному адресу памяти - C++
Есть известный адрес в памяти с известным значением int Хотел бы проверить это значение после того как введу адрес памяти вручную. ...

Взятие обьекта по адресу в памяти - C++
Допустим, я знаю что по адресу 0x13242341 находится произвольный обьект. Как возвратить указатель типа void на данный адрес Типо так?...


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

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

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