Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Общие аспекты работы с памятью

01.06.2019, 19:37. Показов 4429. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сильно не ругайтесь если не тот раздел,не знал куда написать.
Стал я изучать работу с памятью и появилось у меня много вопросов
1. при выделении памяти для нового процесса выделяется (в x86 системах) 4 гига памяти? 2 в 32 степени байта?
2. что такое мэппинг памяти?
3. при выделении памяти для процесса для каждого создается свои стек и куча?
4. я правильно понимаю принцип работы стека? Есть два адресса - начальный адресс стека и адресс вершины стека
при добавлении переменной или чего-то другого в стек сначала высчитвается размер переменной(к примеру для int 4 байта) и т.к. стек растет от старшего до младшего бита(тоесть растет вниз) то выходит что процессор отнимает от текущего адресса вершины стека эти 4 байта и потом в стек добавляет эту переменную типа int?
4.1 если я правильно понял как работает стек тогда возник второй вопрос : память для стека заранее выделяется как-то? Если да то что будет если у нас в стеке к примеру помещается 12 байт памяти,а мы в стек пихаем еще сверху?
4.2 Если память для стека не выделяется заранее то каждый раз при добавлении элемента в стек программа управляющая памятью должна искать новый физ адресс для стека если в текущем дальше нету свободной памяти?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2019, 19:37
Ответы с готовыми решениями:

Какие нужно знать аспекты C++ для работы с Unreal Engine 4?
вопрос.

Разработка мобильного приложения (общие аспекты)
Здравствуйте, уважаемые спецы. Я учусь в универе и стараюсь сам развивать свои знания, так как в универе как и на любой учебе дают...

Аспекты работы HDD
1. Возьмем такую ситуацию. Есть, например, HDD на 12 Тб (8 блинов по 1,5 ТБ), который заполнен на 95% файлами от 50 МБ до 50 ГБ. И вот все...

27
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
02.06.2019, 14:14  [ТС]
Студворк — интернет-сервис помощи студентам
Evg,так я и спрашивал Вас даст ли мне та книга которую Вы мне посоветовали ответы на те вопросы которые я задавал(при условии что я пойму что там написано конечно, я понимаю что это индивидуально)?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
02.06.2019, 15:51
Цитата Сообщение от ReYalp Посмотреть сообщение
Evg,так я и спрашивал Вас даст ли мне та книга которую Вы мне посоветовали ответы на те вопросы которые я задавал(при условии что я пойму что там написано конечно, я понимаю что это индивидуально)?
Я не могу тебе ответить на твой вопрос. Из моих объяснений, судя по всему, ты мало что понимаешь. Подозреваю, что ты пока ещё не научился понимать принципы работы чего-либо, пряча ненужные детали реализации за абстракции. Конкретно в этой книге автор излишне много времени уделяет деталям реализации. Но я не могу тебе сказать, поймёшь ли что-то в этой книге, или нет. У всех разный способ восприятия информации. В любом случае помимо этой книги есть миллион других книг и статей с другими способами изложения материала
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
02.06.2019, 19:08  [ТС]
Evg, да с чего Вы взяли что я мало чего понимаю? Я понял абсолютно все что Вы мне писали,мне не совем понятно как выделяется физическая память ,вот программе выделилось 4гб(2 в 32) виртуальной памяти,вот меня интересует тот вопрос что в это время делается в физической памяти,судя с Ваших объяснений то в момент выделения виртуальной памяти в физиеской выделяется место только под стек,а позже уже по надобности место для кучи(я понимаю что для ОС стек и куча это пустые слова и одна и та же память),но мне не ясно как менеджер памяти определяет сколько нужно места под стек?
Если по ходу процесса выделяется место в куче(в виртуальной памяти) то что в этот момент происходит в физической?
резервируется ли сразу блок памяти? Или только столько сколько для переменной нужно?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
02.06.2019, 20:06
Цитата Сообщение от ReYalp Посмотреть сообщение
Evg, да с чего Вы взяли что я мало чего понимаю?
Далеко ходить не надо. Например, об этом говорит постановка вопроса

Цитата Сообщение от ReYalp Посмотреть сообщение
судя с Ваших объяснений то в момент выделения виртуальной памяти в физиеской выделяется место только под стек
Пока ты не научишься отделять виртуальную память от всего остального хозяйства, у тебя так и будет в голове каша. Уже хрен знает сколько раз я повторял эту мысль, видимо, надо повторить в хрен плюс первый раз. Выбери один из двух варантов:

1. Разберись, что такое виртуальная память
2. Вообще забудь про то, что виртуальная память существует в природе. Размести в голове машину, на которой установлено 2^32 байта памяти и исполняется один-единственный процесс, которому доступна вся память

А потом начни перечитывать тему с начала, потому что ответы на большинство твоих вопросов уже звучали, и не раз

Как только ты задаёшься вопросом "выделения" физической памяти, у тебя начинается в голове каша. Если пойдёшь по первому варианту, то эти вопросы отпадут сами собой. Либо формулировки вопросов станут осмысленными. Пока вопросы звучат как "если мне делать скворечник, то лучше держать молоток в правой руке, или в левой?" Если пойдёшь по второму варианту, то вопросов "выделения" памяти не должно возникать вообще, т.к. во втором варианте процессу доступна вся физическая память и ничего не надо "выделять" в том смысле, в котором это подразумеваешь ты
1
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
02.06.2019, 20:13  [ТС]
Evg, та я понимаю что потоку для которого выделяется виртуальная память доступна вся память(виртуальная), мне интересно что в это время происходит с физической памятью, именно это интересно, именно в физической, не что творится в виртуальной, а в физической, что происходит если в виртуальной памяти создаётся переменная в куче, что именно происходит в этот момент в физической?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
02.06.2019, 20:26
Отображение виртуальной памяти на физическую всегда и везде происходит одинаковым образом. Здесь нет каких-то особенностей при работе со стеком, с кучей, с веником или пряником. Для всех случаев всегда и везде отображение физической памяти на виртуальную работает абсолютно одинаково. Операционной системе плевать на стеки, кучи и прочее. Она просто выделяет некий объём виртуальной памяти при запуске процесса и далее корректирует его при запросах "дай память" и "освободи память". Операционная система понятия не имеет о том, что в процессе есть менеджер памяти или какая-то работа со стеком

Иди уже и почитай, что такое виртуальная память. Без понимания этого любое упоминание о физической памяти будет бессмысленно, потому что ты не будешь понимать, что тебе говорят. И смысла в вопросах вида "что в это время происходит с физической памятью" нету, тупо потому что ты в упор не хочешь взять книгу и почитать. То время, которое ты потратил на эту тему на форуме, мог бы давно с успехом потратить на чтение, но ты почему-то ждёшь, что тебе кто-то всё возьмёт и разжуёт. Поверь мне, этого не будет, если речь идёт о реальном понимании, а не о сдаче зачёта. Тема большая и никто тебе не станет на форуме писать тексты на 10 страниц и рисовать картинки
0
3 / 3 / 0
Регистрация: 30.05.2016
Сообщений: 31
06.10.2019, 17:21
Evg, Здравствуйте, у меня такой вот вопрос. Я понимаю под виртуальной памятью - кусок памяти, так как его видит процесс. Т.е. от нуля и до какого-то значения. Это сделано для того что бы процессы по умолчанию не вмешивались в работу других процессов. А что бы узнать где на самом деле лежит к примеру какая-нибудь инструкция, то необходимо преобразовывать логический адрес в физический. Прошу меня поправить, если есть неточности. Вопрос у меня такой:
есть два способа виртуализации памяти(свопинг и виртуальная память). Не могу понять почему, при использовании виртуальной памяти виртуальное адресное пространство процесса может быть больше объема физической памяти. Вот это меня загнало в тупик.. При свопинге так не проходит. Заранее спасибо за ответ =)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
06.10.2019, 18:15
Свопинг - это НЕ один из способов, а дополнительная техническая составляющая виртуальной памяти

Допустим, у тебя есть только одна физическая страница памяти размером в 1000 байт. И есть виртуальное адресное пространство размером в 2000 байт. Допустим диапазон виртуальных адресов от 0 до 999 уже залит в физическую память. Теперь ты перешёл на виртуальный адрес 1000, его в физической памяти нет. В этом случае внешняя сила берёт всю физическую память размером 1000 байт и откачивает на диск в файл А, и теперь считается, что физическая память соответствует диапазону виртуальных адресов от 1000 до 1999. Затем ты перешёл на виртуальный адрес 999. В физической памяти его нет. Внешняя сила опять откачивает содержимое физической памяти на диск, уже в файл Б, затем считывает файл А и помещает его в физическую память. Теперь считается, что физическая память соответствует виртуальным адресам от 0 до 999. И так далее. Своппинг - это и есть процесс откачки физической памяти на диск и обратно

Программа никогда не использует всю память одновременно. Ни по данным, ни по коду. Поэтому в физической памяти достаточно размещать только те страницы, которые В ДАННЫЙ момент исполняются или читаются-пишутся. Всё остальное в этот момент может находиться на диске
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.10.2019, 18:15

Общие принципы работы с прогрессбаром
Ребята здравствуйте! подскожите пожалуйсто каким методом, (кроме конечно тыка) можно регулировать скорость и узнавать сколько прибавить или...

Ошибка работы с памятью
Добрый день, прошу вашей помощи.Пишу программу кодировки RC4. Пишу функцию перевода из букв в численные значения, т.е ищу номер букв в...

функции работы с памятью
нужно реализовать свою функцию memcpy. #include <iostream> using std::cout; using std::endl; using std::cin; void*...

Общие принципы работы с набором данных
Общие принципы работы с набором данных

Трудоустройство и условия работы. Общие моменты
Не нашёл такой темы, и честно говоря, удивлён. Конечно, интересны конкретные предложения. Но хотелось бы обсудить "вообще" такие...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru