Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Jariel
2 / 2 / 1
Регистрация: 24.05.2012
Сообщений: 90
#1

Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти? - C++

20.04.2014, 18:05. Просмотров 534. Ответов 7
Метки нет (Все метки)

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

p.s. Я прекрасно понимаю, что в памяти хранится не только мои переменные, но и важные данные для работы операционной системы и скорее всего стоит защита от таких вот "хацкеров" как я, что бы они не угробили систему. Но все же реально ли это (опять же знаю, что все реально, но может кто знает способ. Может в какой то ОС есть такой доступ).
http://www.cyberforum.ru/cpp-beginners/thread365835.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 18:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти? (C++):

Можно ли создать в C++ ограниченную переменную (для экономии памяти) без использования классов
Например, переменную, скажем, test, которая принимает значение в диапазоне...

Где хранить размер блока памяти?
Пишу менеджер памяти. Храню размер в первых 4x байтах выделенной памяти. В...

Хранить данные в оперативной памяти
есть два класса , нужно хранить общие данные, при чём хранить и изменять...

Как создать простейшую ссылку/указатель на ячейку памяти/переменную
Здраствуйте. Подскажите пожалуйста, как сделать простейшую ссылку/указатель на...

Какое минимальное число можно записать в 6 разрядную ячейку памяти
Всем привет. Задача: Поиск максимального числа(решал сам по примеру): Верно...

7
ProNoooob
76 / 76 / 8
Регистрация: 14.10.2009
Сообщений: 121
20.04.2014, 19:26 #2
1) Это сложный вопрос.
Во первых нужно понимать, что в Windows используется механизм виртуальной памяти.
Таким образом, когда ты сохраняешь данные по определенному адресу, ОС сохраняет их в реальной памяти по другому(реальному адресу) или на диске.

Второй момент состоит в том, что процесс(программа) может читать и записывать только в память, выделенную ОС специально для нее. Тут конечно есть куча обходных моментов. Самый простой - использование функций WriteProcessMemory(), которая позволяет писать в память чужой программы.

2) Да, конечно. Правда и собирать это число придется так-же по кусочкам ^_^
1
Jariel
2 / 2 / 1
Регистрация: 24.05.2012
Сообщений: 90
20.04.2014, 19:30  [ТС] #3
2) ну я так понимаю, что это будет возможно только в том случае если найдем решение на первый вопрос?
1) а есть информация как с этим дела в Linux или Os X ?
0
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
20.04.2014, 19:39 #4
Jariel, ассемблер тебе в помощь =)
0
ProNoooob
76 / 76 / 8
Регистрация: 14.10.2009
Сообщений: 121
20.04.2014, 19:47 #5
ну я так понимаю, что это будет возможно только в том случае если найдем решение на первый вопрос?
Хмм. На сколько я знаю, такая задача решается написанием драйвера уровня ядра.
Но не думаю, что этот вариант для вас.

Цитата Сообщение от Jariel Посмотреть сообщение
а есть информация как с этим дела в Linux или Os X ?
На сколько я знаю так-же.
Механизм виртуальной памяти решает 2 проблемы:
1) Позволяет использовать механизм своппинга. Это было очень актуально несколько лет назад.
2) Ограничивает доступ к не своей памяти. Это очень важно. Иначе бы программы портили бы память друг друга и ничего бы не работало.

Просто скажите какую проблему вы решаете?
часто, можно найти более простое решение.
1
Jariel
2 / 2 / 1
Регистрация: 24.05.2012
Сообщений: 90
20.04.2014, 19:57  [ТС] #6
Никакой не решаю. я всю учебную жизнь писал на C#, а тут приехал на семестр в Китай и кроме Си и С++ ничего нет. Вот начал изучать. Работаем с микроконтроллерами и для их работы очень полезно понимать как работает память. Думаю как раз в контроллерах более прямой доступ к памяти. Но я вот изучаю и мне стало интересно, мог ли я сам решать куда писать. Вы мне достаточно подробно объяснили ситуацию. Спасибо за это
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.04.2014, 00:50 #7
Цитата Сообщение от Jariel Посмотреть сообщение
могу ли я разместить переменную в нужную ячейку памяти
как уже ответили - в конкретную нельзя, но в косвенную можно
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main() {
    char buf[sizeof(int)];
    int* ptr = new (buf) int(42);
    std::cout << static_cast<const void*>(buf) << '\n' << ptr << '\n' << *ptr;
    return 0;
}
это называется placement new
0
ValeryS
Модератор
7124 / 5392 / 669
Регистрация: 14.02.2011
Сообщений: 18,210
21.04.2014, 01:05 #8
Цитата Сообщение от Jariel Посмотреть сообщение
1) могу ли я разместить переменную в нужную ячейку памяти. Например:
C++
1
2
int a ;
&a = ABF068;
так нет
для начала ты не шестнадцатеричное число написал а метку
а вот так можешь
C++
1
2
int * a=0xABF068 ;
*a =100;
по адресу ABF068 запишется число 100
ктати вполне штатная ситуация во времена ДОС или при работе с микроконтроллерами или програмирование на низком уровне,например БИОС пишешь, когда имеешь доступ ко всей памяти
а на современных ОС скорее всего выскочит исключение "неправомерный доступ"

Добавлено через 54 секунды
Цитата Сообщение от Jupiter Посмотреть сообщение
как уже ответили - в конкретную нельзя,
почему это?
мир состоит не только из Виндос и Линукс

Добавлено через 3 минуты
добавлю
можешь и на виндос если будешь писать прогу для работы в 0 кольце, но ответственность за крах системы берешь на себя
0
21.04.2014, 01:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2014, 01:05
Привет! Вот еще темы с решениями:

Можно ли создать компонент который будет хранить один в памяти для многих виртуальных серверов?
Можно ли создать компонент который будет хранить один в памяти для многих...

Где реально бесплатно можно разместить БД mySQL?
Уже кучу сайтов перепробовал, где бесплатно предлагают разместить БД mySQL, но...

Как данные из переменной ввести в нужную ячейку БД Access
В общем проблема такая: Есть две формы (Form1 и Form2). На Form1 у меня...

Как выставить нужную частоту памяти?
Всем привет! У меня такая проблема: не могу выставить нужную частоту памяти...


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

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

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