Skip to Content

Q: /3GB switch и карта памяти

Вот есть у меня RawDigger в его 32-битной виндовой ипостаси.

И есть одна и та же виндовая машина, Win7-64 бита.

Линкую с поддержкой/без поддержки /3GB (/LARGEADDRESSAWARE у линкера) и скармливаю один и тот же файл (80-мегапиксельный с задника). На 64-битной винде программе с поддержкой /3GB дадут 4GB, а без такой поддержки - 2Gb.

Дальше начинаю собирать и так и сяк и вижу, что вариант без поддержки 3GB получает от системы по рогам когда потребление памяти у него (Peak Working Set по таск-менеджеру/процесс-эксплореру) вовсе не 2Gb, а ~1.1. А вариант с поддержкой - дорастает до 1.2Gb (многовато, да, но примерно столько и расходуется на всякие глупости, чтобы при смене настроек не перечитывать файл).

Вопрос: а чем-то можно в винде посмотреть "использованное адресное пространство"? Ну то есть я догадываюсь, что ~800M пропали по причине фрагментации, а как-то можно мэпу хипа глянуть?

Может есть какой-то правильный маллок, которому можно пометить аллоцированное (именами, или по номерам строк в файле), а он потом карту нарисует?

Потому что сдается мне, что 80Mpix можно и без /3GB смотреть, надо только аллокации в правильном порядке делать.

Comments

>> Потому что сдается мне, что 80Mpix можно и без /3GB смотр

>> Потому что сдается мне, что 80Mpix можно и без /3GB смотреть

80мпикс рав я смотрел и даже конвертировал вообще на старом ноуте с пределом памяти в 2Гб физически.

PS. не знаю о том ли я понял.

Конвертации нужно меньше памяти, чем RawDigger-у. RD хранит

Конвертации нужно меньше памяти, чем RawDigger-у.

RD хранит результаты промежуточных шагов обработки, чтобы их быстро показать. Конвертору это не нужно.

понятно

понятно

VMMap.

VMMap.

Ага, клевая штука. Спасибо А вот того же самого, но с раскр

Ага, клевая штука. Спасибо

А вот того же самого, но с раскраской по времени "вот в этот момент строчка N в файле K захотела 200M хипа"?

Понятно, что это библиотека должна быть. Я готов :)

Вот не знаю. Внутри VS2012 появился клевый дебаггер дедлоков

Вот не знаю. Внутри VS2012 появился клевый дебаггер дедлоков (Concurrency Visualizer), может что-то и для памяти есть - но еще не встречал.

Вот у меня получилось vmmap-ом, что - первый большой аллоц

Вот у меня получилось vmmap-ом, что
- первый большой аллоцированный блок - начинается по адресу примерно 256M от начала
- а по адресу 607d0000 (1.6Gb) уже живет DLL-ка (конкретно, QtXml4d )
Т.е. всего сплошного адресного пространства ~1.35G. Небогато.

В /3GB варианте - помимо этих 1.3 есть еще 2Gb начиная с 0x7fff0000

Можно попробовать пересобрать qtxml. Но вообще ASLR и всяки

Можно попробовать пересобрать qtxml.

Но вообще ASLR и всякие проги, вгружающие DLL в чужие процессы, не дают ни разу гарантий больших последовательных кусков :/

(TeamViewer, плагины всяких антивирусов, писалки видео, плюс если вы используете common shell dialogs, то к вам еще вгружается всё, что у юзера в шелл экстеншенах наставлено - Dropbox, Tortoise*, etc)

Ну как бы особой проблемы нет, без rgb-rendering потребности

Ну как бы особой проблемы нет, без rgb-rendering потребности в памяти падают в несколько раз т.е. даже с 80-мпикс жить можно

Я просто пытался понять, отчего обещают 2гига а дают 1.1

> Можно попробовать пересобрать qtxml. Достаточно обработат

> Можно попробовать пересобрать qtxml.

Достаточно обработать его rebase.exe (editbin.exe /rebase).

Это если Тутубалину действительно нужна непрерывная память, что странно (обычно большая непрерывная область памяти требуется лишь для всяких shared memory объектов).

У меня очень большие malloc-и (для рассматриваемых 80Mpix -

У меня очень большие malloc-и (для рассматриваемых 80Mpix - 2x160, 2x240 и 640M).

В фрагментированной памяти есть большой шанс не аллоцировать, даже если формально памяти достаточно.

не знаю как в винде, а в юнихах маллок нынче аллоцирует памя

не знаю как в винде, а в юнихах маллок нынче аллоцирует память не в data сегменте, а за ним

Напрягая памать, что делал когда-то в винде... Была тулза, н

Напрягая памать, что делал когда-то в винде...
Была тулза, называлась как-то "working set tool". Можно попробовать туда копнуть

На всякий случай: для 32б может сказаться полезным PAE

На всякий случай: для 32б может сказаться полезным PAE

Вот тут: https://www.exelisvis.com/Support/HelpArticleDetail

Вот тут:
https://www.exelisvis.com/Support/HelpArticleDetail/ArticleId/3346/Overc...
абзац
Forced Memory Fragmentation In window-based Windows Applications

Ну и ещё пару ссылок: http://bugslasher.net/2011/01/15/memor

Ну и ещё пару ссылок:
http://bugslasher.net/2011/01/15/memory-exhaustion-even-if-a-large-enoug...
оттуда
http://msdn.microsoft.com/en-us/library/aa366750%28VS.85%29.aspx
и http://i-web.i.u-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectu...
Но получается, что на семёрке всё должно работать изначально.
Надо копать.

Ну у меня реально большие куски. Типа 2x 150M (байер, байер

Ну у меня реально большие куски. Типа 2x 150M (байер, байер после вычитания черного), 230M (RGB render), 320M (битмеп), 640M - процессинг.

В 1.2G места это сложно разместить.

sysinternals vmmap http://technet.microsoft.com/en-us/sysint

sysinternals vmmap
http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx

В свое время пришлось специально приседать в некоторых алгоритмах, чтобы куски выделялись поменьше. Аналогично все заканчивалось недалеко за 1 Gb.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <s> <i> <b> <blockquote>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <ruby>. The supported tag styles are: <foo>, [foo].
  • Images can be added to this post.

More information about formatting options



.