|
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
|
|
| 01.06.2019, 19:37 | |
|
Ответы с готовыми решениями:
27
Какие нужно знать аспекты C++ для работы с Unreal Engine 4? Разработка мобильного приложения (общие аспекты) Аспекты работы HDD |
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 02.06.2019, 14:14 [ТС] | |
|
Evg,так я и спрашивал Вас даст ли мне та книга которую Вы мне посоветовали ответы на те вопросы которые я задавал(при условии что я пойму что там написано конечно, я понимаю что это индивидуально)?
0
|
|
|
|
||
| 02.06.2019, 15:51 | ||
|
0
|
||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 02.06.2019, 19:08 [ТС] | |
|
Evg, да с чего Вы взяли что я мало чего понимаю? Я понял абсолютно все что Вы мне писали,мне не совем понятно как выделяется физическая память ,вот программе выделилось 4гб(2 в 32) виртуальной памяти,вот меня интересует тот вопрос что в это время делается в физической памяти,судя с Ваших объяснений то в момент выделения виртуальной памяти в физиеской выделяется место только под стек,а позже уже по надобности место для кучи(я понимаю что для ОС стек и куча это пустые слова и одна и та же память),но мне не ясно как менеджер памяти определяет сколько нужно места под стек?
Если по ходу процесса выделяется место в куче(в виртуальной памяти) то что в этот момент происходит в физической? резервируется ли сразу блок памяти? Или только столько сколько для переменной нужно?
0
|
|
|
|
|||
| 02.06.2019, 20:06 | |||
|
1. Разберись, что такое виртуальная память 2. Вообще забудь про то, что виртуальная память существует в природе. Размести в голове машину, на которой установлено 2^32 байта памяти и исполняется один-единственный процесс, которому доступна вся память А потом начни перечитывать тему с начала, потому что ответы на большинство твоих вопросов уже звучали, и не раз Как только ты задаёшься вопросом "выделения" физической памяти, у тебя начинается в голове каша. Если пойдёшь по первому варианту, то эти вопросы отпадут сами собой. Либо формулировки вопросов станут осмысленными. Пока вопросы звучат как "если мне делать скворечник, то лучше держать молоток в правой руке, или в левой?" Если пойдёшь по второму варианту, то вопросов "выделения" памяти не должно возникать вообще, т.к. во втором варианте процессу доступна вся физическая память и ничего не надо "выделять" в том смысле, в котором это подразумеваешь ты
1
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 02.06.2019, 20:13 [ТС] | |
|
Evg, та я понимаю что потоку для которого выделяется виртуальная память доступна вся память(виртуальная), мне интересно что в это время происходит с физической памятью, именно это интересно, именно в физической, не что творится в виртуальной, а в физической, что происходит если в виртуальной памяти создаётся переменная в куче, что именно происходит в этот момент в физической?
0
|
|
|
|
|
| 02.06.2019, 20:26 | |
|
Отображение виртуальной памяти на физическую всегда и везде происходит одинаковым образом. Здесь нет каких-то особенностей при работе со стеком, с кучей, с веником или пряником. Для всех случаев всегда и везде отображение физической памяти на виртуальную работает абсолютно одинаково. Операционной системе плевать на стеки, кучи и прочее. Она просто выделяет некий объём виртуальной памяти при запуске процесса и далее корректирует его при запросах "дай память" и "освободи память". Операционная система понятия не имеет о том, что в процессе есть менеджер памяти или какая-то работа со стеком
Иди уже и почитай, что такое виртуальная память. Без понимания этого любое упоминание о физической памяти будет бессмысленно, потому что ты не будешь понимать, что тебе говорят. И смысла в вопросах вида "что в это время происходит с физической памятью" нету, тупо потому что ты в упор не хочешь взять книгу и почитать. То время, которое ты потратил на эту тему на форуме, мог бы давно с успехом потратить на чтение, но ты почему-то ждёшь, что тебе кто-то всё возьмёт и разжуёт. Поверь мне, этого не будет, если речь идёт о реальном понимании, а не о сдаче зачёта. Тема большая и никто тебе не станет на форуме писать тексты на 10 страниц и рисовать картинки
0
|
|
|
3 / 3 / 0
Регистрация: 30.05.2016
Сообщений: 31
|
|
| 06.10.2019, 17:21 | |
|
Evg, Здравствуйте, у меня такой вот вопрос. Я понимаю под виртуальной памятью - кусок памяти, так как его видит процесс. Т.е. от нуля и до какого-то значения. Это сделано для того что бы процессы по умолчанию не вмешивались в работу других процессов. А что бы узнать где на самом деле лежит к примеру какая-нибудь инструкция, то необходимо преобразовывать логический адрес в физический. Прошу меня поправить, если есть неточности. Вопрос у меня такой:
есть два способа виртуализации памяти(свопинг и виртуальная память). Не могу понять почему, при использовании виртуальной памяти виртуальное адресное пространство процесса может быть больше объема физической памяти. Вот это меня загнало в тупик.. При свопинге так не проходит. Заранее спасибо за ответ =)
0
|
|
|
|
|
| 06.10.2019, 18:15 | |
|
Свопинг - это НЕ один из способов, а дополнительная техническая составляющая виртуальной памяти
Допустим, у тебя есть только одна физическая страница памяти размером в 1000 байт. И есть виртуальное адресное пространство размером в 2000 байт. Допустим диапазон виртуальных адресов от 0 до 999 уже залит в физическую память. Теперь ты перешёл на виртуальный адрес 1000, его в физической памяти нет. В этом случае внешняя сила берёт всю физическую память размером 1000 байт и откачивает на диск в файл А, и теперь считается, что физическая память соответствует диапазону виртуальных адресов от 1000 до 1999. Затем ты перешёл на виртуальный адрес 999. В физической памяти его нет. Внешняя сила опять откачивает содержимое физической памяти на диск, уже в файл Б, затем считывает файл А и помещает его в физическую память. Теперь считается, что физическая память соответствует виртуальным адресам от 0 до 999. И так далее. Своппинг - это и есть процесс откачки физической памяти на диск и обратно Программа никогда не использует всю память одновременно. Ни по данным, ни по коду. Поэтому в физической памяти достаточно размещать только те страницы, которые В ДАННЫЙ момент исполняются или читаются-пишутся. Всё остальное в этот момент может находиться на диске
0
|
|
| 06.10.2019, 18:15 | |
|
функции работы с памятью Общие принципы работы с набором данных Трудоустройство и условия работы. Общие моменты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №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, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|