Форум программистов, компьютерный форум, киберфорум
Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.58/55: Рейтинг темы: голосов - 55, средняя оценка - 4.58
Эксперт по электронике
7173 / 3349 / 345
Регистрация: 28.10.2011
Сообщений: 13,194
Записей в блоге: 7

Дискуссия о распределении памяти в ОС

11.02.2021, 01:09. Показов 17412. Ответов 132
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Замабувараев Посмотреть сообщение
Картинку можно будет взять хоть миллион на миллион пикселей
Умножьте миллион на миллион и на 3. Узнаете сколько нужно памяти для хранения данных картинки.
Нужно 2793 ГБ. У вас установлено столько в компе?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2021, 01:09
Ответы с готовыми решениями:

Работа со стеком на последовательном распределении памяти
1. Создание пустого стека 2. Добавление элемента на вершину стека 3. Удаление элемента с вершины стека Работу программы...

Реализация стека на массиве и динамическом распределении памяти
всем привет, дано такое задание: Используя стек, решить следующую задачу. Напечатать каждое слово текстового файла Т в обратном...

Реализовать процедуры работы со стеком на последовательном распределении памяти
Помогите кто может. Задание 1. На языке программирования Pascal реализовать процедуры работы со стеком на последовательном...

132
Модератор
10067 / 3912 / 885
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
15.02.2021, 15:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Зачем мне причины? Я говорю, что твоя фраза не верна. 100 одинаковых приложений занимают в памяти больше места чем 1 приложение.
Перефразируй в соответствии с реальностью, тогда и спора не будет.
Не нужно съезжать с темы. Замабувараев написал что загрузчик проецирует исполняемый файл в память. Я также написал:
Цитата Сообщение от The trick Посмотреть сообщение
Есть разница. Запусти 100 экземпляров блокнотов. Все 100 экземпляров будут ссылаться на туже самую память. Открой 100 раз файл в разных прогах и считай с него данные в буфера - получишь 100 разных буферов.
100 экземпляров блокнотов ссылаются на одну и туже память. Я не говорил что 100 процессов ссылаются на одну и туже память, не нужно выворачивать дискуссию. Эта ветка дискуссии касается исполняемых файлов.

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Перефразируй в соответствии с реальностью, тогда и спора не будет.
Ага, давай не отмазывайся Ты уже выше столько понаписал что потом самому стыдно читать будет Я без злости если что
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
15.02.2021, 15:06
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Перефразируй в соответствии с реальностью, тогда и спора не будет.
Покажите сколько всего памяти занимает один блокнот.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.02.2021, 15:26
Цитата Сообщение от Замабувараев Посмотреть сообщение
Покажите сколько всего памяти занимает один блокнот.
Как нарисовать 40 соприкасающихся окружностей?
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
15.02.2021, 15:37
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Как нарисовать 40 соприкасающихся окружностей?
Не понял, где там написано сколько всего памяти занимает один блокнот. Или 2,8 гигабайта — это один блокнот занимает?
0
Модератор
10067 / 3912 / 885
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
15.02.2021, 15:39
Цитата Сообщение от Quiet Snow Посмотреть сообщение
При хаотичном доступе да особо никак. Только собирать запросы в пачку и сбрасывать на диск.
Но не по 4k, а нормальными кусками. С запросами по чтению делать также.
Что значит собирать в пачку и сбрасывать на диск? Ну никакого преимущества это не даст. К примеру нужно тебе разметить огромный файл через каждый ГБ, и будешь ты туда-сюда по МБ кидать. В чем преимущество? При использовании маппинга система только 100 - 4 килобайтных куска раскидает. В твоем случае придется раскидывать "нормальными кусками", опять тормоза и излишняя нагрузка на хард + неоправданное уменьшение ресурса SSD.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
И конечно, не собирался принципиально эмулировать этот механизм, можно просто использовать сходный
принцип, говорил больше за то, чтобы решить задачу альтернативным способом, чтобы заточить
обработку данных под особенности железа(HDD).
Так принцип должен быть такой чтобы это было выгоднее использовать чем маппинги. А если выгоды нет то смысл?

Цитата Сообщение от Quiet Snow Посмотреть сообщение
При нехаотичном доступе - тут всё тоже самое, но гораздо предсказуемее, этот случай
ты описал и твоё решение не будет ничем лучше моего или решения любого другого человека.
Просто ты используешь механизм ОС, я бы просто писал тоже самое руками, разбил бы пространство
на несколько файлов, загрузил блок/посчитал/выгрузил и т.п. тоже большую часть делал
бы в оперетиве, нафиг мне драконить диск?
Тоже самое - никакой выгоды перед маппингами, даже наоборот оверхед из-за кеша + излишние затраты памяти в случаях распараллеливания доступа. Я уже скидывал ссылку на официальное описание того как маппинги работают.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Организация памяти, посмотрим сколко есть оперативы, заведём в оперативе строк столько, сколько влезет в оперативу, разобъём всё изображение на такие блоки.
Вот тут ты сам на "свои грабли" наступил. Как только более приоритетная задача потребует память, твою память быстренько система отправит в системный своп. Ну и дальше по твоему сценарию как ты уже неоднократно написал.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Заведём структуру, в которой укажем
время последнего обращения и частоту обращений. Загрузка и выгрузка будет идти сразу целым блоком.
И как ты будешь проверять обращения? Каждое обращение к блоку будешь тестировать? Ненужный оверхед. В Windows уже есть такой механизм который поддерживается на уровне железа.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Хорошее решение, плохое решение, главное что простое, объясняется на пальцах, не дерёт диск
больше нужного. Сразу выдаёт готовый результат в виде файлов.
Это изобретение велосипеда, ручная отрисовка и т.п. Как выглядит алгоритм с моей стороны.
1. Создаем файл нужного размера;
2 (а). Создаем DIB-секцию в которую передаем файл-маппинг созданного выше файла, где указываем какую часть файла мы будем использовать (к примеру 1000000 * 100 пикселей);
2 (б). Создаем GDI+ битмап в который передаем наш файл-маппинг и часть файла которую будем использовать;
3. Рисуем обычными GDI / GDI+ функциями на нужном регионе;
4. По завершении отрисовки, сбрасываем целый блок на диск, и переходим к п. 1 пока весь файл не будет обработан.

Все. Задача решена.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Писал же про разграничение чтения\записи и работу с кусками данных, существенно превышающими 4 килобайта.
Какая разница? Ну если тебе так хочется выгружай хоть по 1ГБ куски в чем проблема? Я же скинул функцию, там указывай нужный размер для выгрузки и все.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.02.2021, 16:01
Цитата Сообщение от Замабувараев Посмотреть сообщение
где там написано сколько всего памяти занимает один блокнот.
ПО-русски написано. См. внимательно.
Ещё одно наблюдение. На диске Калькулятор.exe занимает 25Кб. Значит сто копий 25*100 = 2.5МБ
Т.е. если нужно перекинуть 100 раз Калькулятор с HDD, то это 2.5МБ информации.
Но в памяти 100 Калькуляторов занимают 4.1ГБ - 2.8ГБ = 1.3ГБ
1300МБ / 2.5МБ = 520
Итого, в вашей отражённой памяти с моего HDD в DDR4 в 250 раз больше занято памяти, чем взято на исходном HDD!
0
Модератор
10067 / 3912 / 885
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
15.02.2021, 16:06
Цитата Сообщение от Pro_grammer Посмотреть сообщение
ПО-русски написано. См. внимательно.
Ещё одно наблюдение. На диске Калькулятор.exe занимает 25Кб. Значит сто копий 25*100 = 2.5МБ
Т.е. если нужно перекинуть 100 раз Калькулятор с HDD, то это 2.5МБ информации.
Но в памяти 100 Калькуляторов занимают 4.1ГБ - 2.8ГБ = 1.3ГБ
1300МБ / 2.5МБ = 520
Итого, в вашей отражённой памяти с моего HDD в DDR4 в 250 раз больше занято памяти, чем взято на исходном HDD!
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
15.02.2021, 18:23
Цитата Сообщение от The trick Посмотреть сообщение
Как только более приоритетная задача потребует память, твою память быстренько система отправит в системный своп.
А твою не отправит? Или оператива на твой маппинг из воздуха возьмётся? Жжёшь!

Цитата Сообщение от The trick Посмотреть сообщение
Что значит собирать в пачку и сбрасывать на диск? Ну никакого преимущества это не даст.
После этого можно дальше ничего не писать. Ты думаешь, что оно всё попадёт в кеш драйвера, либо в аппаратный.
Вся эта мелочёвка. А на какой-нибудь старой машине с XP, да не дай бог с одним ядром будет всё иначе.
Там местами даже DMA не пашут нормально(на всех, которые мне попадались не пашут) и запросы
к дискам попросту останавливают всю систему, пока диск не ответит. Не видел такого ни разу?
На современных машинах даже отголоски этого чувствуются, когда HDD.

Цитата Сообщение от The trick Посмотреть сообщение
Какая разница? Ну если тебе так хочется выгружай хоть по 1ГБ куски в чем проблема?
У меня нет проблем, не разбрасываюсь гигабайто-терабайтами памяти. DOS многому учит, экономить,
выискивать любые средства, чтобы сделать с минимальными затратами ресурсов.

Цитата Сообщение от The trick Посмотреть сообщение
И как ты будешь проверять обращения? Каждое обращение к блоку будешь тестировать? Ненужный оверхед.
Это примерный план. Но думаю, тестировать обращение к блокам и не нужно, это я ляпнул, не особо подумав,
т.к. были заведены соотв. структуры в итоге алгоритм обозначит, в каких блоках, что должно быть, просто берём
и фигачим. Грубо говоря задача оптимизирована и решена чисто алгоритмически. И отработает,
скорее всего, намного быстрее, чем озвученный способ с дефолтным маппингом, по принципу массива
как показывал Замабувараев. Про GDI и GDI+ совместно с маппингами вообще ничего сказать не могу,
не баловался, может там вообще страшная жопа, тут сугубо тестировать надо, особенно на таких объёмах,
новые винды вообще дерьмово работают с GDI, может легко оказаться, что софт быстрее в плане линий
и кружочков.

Цитата Сообщение от The trick Посмотреть сообщение
Так принцип должен быть такой чтобы это было выгоднее использовать чем маппинги. А если выгоды нет то смысл?
Выгода есть, и где она зарыта озвучил.

Цитата Сообщение от The trick Посмотреть сообщение
Все. Задача решена.
Да шикарно. Осталось понять зачем геху файл. И почему просто не сделать массив примитивов
и не выводить их с прокруткой мышкой. Эврика...)))

Добавлено через 10 минут
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Итого, в вашей отражённой памяти с моего HDD в DDR4 в 250 раз больше занято памяти, чем взято на исходном HDD!
Думаю дело не в этом, а в том, что калькулятор заводит свою память и размер шейреда
там оказывается в десятки раз меньше этого объёма.
Грубо говоря, от шейреда в данном конкретном случае толку мало. Но если используются
экзешники и библиотеки толще - наверное что-то будет полезное, не много но будет.
0
Модератор
10067 / 3912 / 885
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
15.02.2021, 18:53
Цитата Сообщение от Quiet Snow Посмотреть сообщение
А твою не отправит? Или оператива на твой маппинг из воздуха возьмётся? Жжёшь!
Я не использую системный своп, я не использую всю RAM если ты конечно читаешь о чем я пишу. Только это вообще не имеет значения, ты всю тему мне пишешь про этот своп и сам же проектируешь приложение которое об него спотыкается. Как-то странно, не видишь?

Цитата Сообщение от Quiet Snow Посмотреть сообщение
На современных машинах даже отголоски этого чувствуются, когда HDD.
Что ты мне рассказываешь? Мне не нужно об этом рассказывать.Ты ответь на вопрос который я задал, а ты как всегда ушел от ответа.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
DOS многому учит, экономить,
выискивать любые средства, чтобы сделать с минимальными затратами ресурсов.
Судя по тому что ты написал это не так.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
И отработает,
скорее всего, намного быстрее, чем озвученный способ с дефолтным маппингом
Не отработает быстрее, уже писал не раз почему. Когда ты делаешь какой-либо утверждение то оно должно быть основано на чем-то кроме твоих слов и заблуждений. Большинство выдвинутых мною тезисов здесь подкреплено либо официальной документацией, либо специфической литературой, а также примерами.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Выгода есть, и где она зарыта озвучил.
Странно это, читая твои посты нигде нельзя увидеть эти преимущества.

Добавлено через 10 минут
Кстати еще добавлю что данную задачу можно решить вообще без всяких ухищрений и выделений огромного количества виртуальной памяти, основываясь на том алгоритме что я написал, только вместо файл-маппинга использовать просто небольшой регион виртуальной памяти, отрисовывать в него также как я написал выше, сохранять в PNG в памяти маленький кусок изображения. После сохранения в PNG выдернуть IDAT чанк и добавить его в выходной файл. Поскольку PNG позволяет хранить множество IDAT чанков то файл в итоге будет правильным. Т.е. если касаться чисто того варианта что Замабувараев озвучил изначально, никаких терабайтов памяти не нужно (ну за исключением выходного файла который будет весить не терабайты, но все-равно много).
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
15.02.2021, 18:57
Цитата Сообщение от The trick Посмотреть сообщение
Когда ты делаешь какой-либо утверждение то оно должно быть основано на чем-то кроме твоих слов и заблуждений
Ну тогда лучше ничего больше писать не буду. И так бошка болит. Напоретесь так напоретесь.
0
Модератор
10067 / 3912 / 885
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
16.02.2021, 00:29
Написал небольшой тестовый проект по алгоритму который описал, правда рисует не фрактал, а просто окружности, но это неважно т.к. можно легко заменить, просто не хотелось тратить время еще на анализ и кластеризацию кусков.
Кстати GDI+ не поддерживает сохранение PNG больше 65535 пикселей, пришлось выбрать libpng. Удалось сделать изображение 100000 х 100000 пикселей (ушло около 15 минут) получился файл размером 187МБ:

, для изображния 1000000 х 1000000 уйдет в среднем где-то в 100 раз больше. Фотошоп так и не смог у меня отобразить этот файл, создал на SSD файл в 39ГБ, что-то писал туда-сюда, мне надоело ждать я прибил процесс. Основное время занимает сжатие в PNG - отрисовка идет довольно быстро, так что если использовать обычный raw то можно намного быстрее отрисовать. Программа не содержит проверок ошибок и т.п., только самые базовые. Для буфера выделяется около 500МБ и программа работает с таким куском. Для компиляции и работы нужен вот этот мой фикс для VB6 т.к. libpng С-либа.
Вложения
Тип файла: zip BigPicture.zip (148.6 Кб, 12 просмотров)
1
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
16.02.2021, 08:24
Цитата Сообщение от The trick Посмотреть сообщение
Удалось сделать изображение 100000 х 100000 пикселей (ушло около 15 минут) получился файл размером 187МБ
Пример интересный, но в контексте Qbasic и DOS бессмысленная трата времени и ресурсов.
Вот так выглядит изображение в Qbasic
Вложение 1224964
PNG формат поддерживает 1 бит палитру. Экономия памяти существенная, приведу различия между 24 бит

и 1 бит


Для размера 10000х10000 пикс соотношение текущего объема памяти 12МБ против 286МБ
0
Модератор
10067 / 3912 / 885
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
16.02.2021, 22:30
Pro_grammer, сделал 1bpp
Вложения
Тип файла: zip test.zip (937.0 Кб, 24 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.02.2021, 22:30

Реализовать процедуры работы со стеком на последовательном распределении памяти
На языке программирования Pascal реализовать процедуры работы со стеком на последовательном распределении памяти: - Создание пустого...

Реализовать процедуры работы со стеком на последовательном распределении памяти
Ребят, нужна помощь!!! Так вот, у меня проблема! всегда пишет что стек переполнен, а из файла просто стирает всю инфу. НЕ разбираюсь в...

Ошибка при распределении памяти: realloc(): invalid next size
Добрый день. Написал программу с динамическим массивом. Нужно для него сделать динамическое увеличение памяти, если оно нужно, однако...

Стек: Реализовать процедуры работы со стеком на последовательном распределении памяти
Есть задание 1. На языке программирования C++ реализовать процедуры работы со стеком на последовательном распределении памяти: -...

Стоит ли при динамическом распределении памяти перехватывать возможные ошибки через try/catch?
Здравствуйте. Обращаюсь к опытным. Скажите, стоит ли при каждом динамическом распределении памяти перехватывать возможные ошибки...


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

Или воспользуйтесь поиском по форуму:
133
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru