Показать сообщение отдельно
Старый 31.10.2007, 05:58   #20  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
to gl00mie: В старину (кажется до версии 2.5Sp5) со smartheapом была следующая история: Почему-то он не давал использовать под переменные и буфера приложения всю свободную память. После того как у нас на одном проекте стало не хватать памяти для разноски большого журнала, из датского MBSа пришел кусочек кода, который сейчас лежит в Global::SmartHeapSizeUp(), с инструкцией "Запускать после запуска, перед какими-то глобальными операциями. Когда я стал разбираться с этим куском кода (я там всего не понял целиком - если честно) возникла примерно такая гипотеза - SmartHeap захватывает память у операционной системы кусками, которые называются в его терминологии страницами. (Это точно - я в хелпе по smartHeap проверил). Размер таблицы этих страниц, похоже что,ограничен какой-то константой. (Вот это уже мое предположение) Из за того что дефолтный размер страницы был небольшим, возникала ситуация при которой smartHeap просто не мог захватить нужный размер памяти. Функция smartHeapMemorySizeUp занимается как раз увеличением размера страницы до подходящего значения - чтобы на всю память таблицы хватило.

В начале этой страницы стоит не до конца мне понятный код, который рассчитывает число страниц на основании информации о физической памяти на компе. При этом он ОГРАНИЧИВАЕТ объем используемой памяти. То есть - там при рассчете стоит функция min() которая берет минимальное значение между объемом памяти в мегабайтах помноженным на 32 и 32768.

Смысл магического числа 32768 мне не совсем понятен. Есть подозрение, что если его заменить, например на 65536, то размер памяти, используемой системой - увеличится.
Хотя с другой стороны - есть шансы что это число там стоит не просто так и если его увеличить, что-нибудь в распределении памяти сломается.

Последний раз редактировалось fed; 31.10.2007 в 06:01.